Ці можа значэнне JSON ўтрымліваць шматрадковых радок

Я пішу JSON-файл, які будзе чытаць з дапамогай праграмы Java. Фрагмент выглядае наступным чынам ...

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : "this is a very long line which is not easily readble.
                  so i would like to write it in multiple lines.
                  but, i do NOT require any new lines in the output.
                  I need to split the string value in this input file only.
                  such that I don't require to slide the horizontal scroll again and again while verifying the correctness of the statements.
                  the prev line, I have shown, without splitting just to give a feel of my problem"
    }
  }
}
83
не з'яўляецца адказам на пытанне Уры, але разгледзець пытанне аб выкарыстанні YAML. Калі вы выкарыстоўваеце нешта накшталт Джэксана, вы не ўбачыце вялікай розніцы ў кодзе, які чытае яго, у той час як ур файл дадзеных будзе значна больш зручным для чытання
дададзена аўтар 0cd, крыніца
не з'яўляецца адказам на пытанне Уры, але разгледзець пытанне аб выкарыстанні YAML. Калі вы выкарыстоўваеце нешта накшталт Джэксана, вы не ўбачыце вялікай розніцы ў кодзе, які чытае яго, у той час як ур файл дадзеных будзе значна больш зручным для чытання
дададзена аўтар 0cd, крыніца
@zashu: Большасць тэкставых рэдактараў маюць функцыю мяккага абруча. Гэта адразу ж карысней, чым нейкая жорстка закадавана шырыня лініі.
дададзена аўтар Lightness Races in Orbit, крыніца
@zashu: Большасць тэкставых рэдактараў маюць функцыю мяккага абруча. Гэта адразу ж карысней, чым нейкая жорстка закадавана шырыня лініі.
дададзена аўтар Lightness Races in Orbit, крыніца
магчыма дублікат Multiline радкоў у фармаце JSON
дададзена аўтар Lightness Races in Orbit, крыніца
магчыма дублікат Multiline радкоў у фармаце JSON
дададзена аўтар Lightness Races in Orbit, крыніца
магчыма дублікат Multiline радкоў у фармаце JSON
дададзена аўтар Lightness Races in Orbit, крыніца
Гэта недарэка з шматрадковых радкі ў фармаце JSON, спасылаючыся на гэтае пытанне OP у: «<�я> Ці можна мець шматрадковых радковыя ў JSON гэта <�б> у асноўным для візуальнага камфорту , так што я мяркую, што я магу проста чаргу перанос слоў у маім рэдактары, але я проста цікавае цікава ... </я> »
дададзена аўтар Andre Figueiredo, крыніца
Гэта недарэка з шматрадковых радкі ў фармаце JSON, спасылаючыся на гэтае пытанне OP у: «<�я> Ці можна мець шматрадковых радковыя ў JSON гэта <�б> у асноўным для візуальнага камфорту , так што я мяркую, што я магу проста чаргу перанос слоў у маім рэдактары, але я проста цікавае цікава ... </я> »
дададзена аўтар Andre Figueiredo, крыніца
@LightnessRacesinOrbit працуе GIT паглядзець адрозненне (або дазвол канфліктаў зліцця) на файлы з такімі доўгімі лініямі таксама боль.
дададзена аўтар Hubert Kario, крыніца
@LightnessRacesinOrbit працуе GIT паглядзець адрозненне (або дазвол канфліктаў зліцця) на файлы з такімі доўгімі лініямі таксама боль.
дададзена аўтар Hubert Kario, крыніца
Я думаю, што гэта больш пра чытальнасці сериализованного файла JSON і <�я> не </я> аб пераносе ў загружаных дадзеных (такім чынам, не з'яўляецца дублікат шматразовых радкоў у фармаце JSON ). Падумайце пра гэта больш, як з дапамогай JSON ў выглядзе файла канфігурацыі, дзе ў вас ёсць доўгая радок і, для зручнасці чытання, карысна цяжка абгарнуць радок у выпадку, калі хто-то рэдагаваць яго з дапамогай тэкставага рэдактара.
дададзена аўтар zashu, крыніца
Я думаю, што гэта больш пра чытальнасці сериализованного файла JSON і <�я> не </я> аб пераносе ў загружаных дадзеных (такім чынам, не з'яўляецца дублікат шматразовых радкоў у фармаце JSON ). Падумайце пра гэта больш, як з дапамогай JSON ў выглядзе файла канфігурацыі, дзе ў вас ёсць доўгая радок і, для зручнасці чытання, карысна цяжка абгарнуць радок у выпадку, калі хто-то рэдагаваць яго з дапамогай тэкставага рэдактара.
дададзена аўтар zashu, крыніца
Я думаю, што гэта больш пра чытальнасці сериализованного файла JSON і <�я> не </я> аб пераносе ў загружаных дадзеных (такім чынам, не з'яўляецца дублікат шматразовых радкоў у фармаце JSON ). Падумайце пра гэта больш, як з дапамогай JSON ў выглядзе файла канфігурацыі, дзе ў вас ёсць доўгая радок і, для зручнасці чытання, карысна цяжка абгарнуць радок у выпадку, калі хто-то рэдагаваць яго з дапамогай тэкставага рэдактара.
дададзена аўтар zashu, крыніца
<�Код> { «testCases»: { «case.1»: { «сцэнар»: «гэта справа 1.», «вынік»: «гэта вельмі доўгая лінія, якая не з'яўляецца лёгка readble, так што я хацеў бы. пісаць у некалькіх радках. але, я не патрабую якіх-небудзь новых радкоў ў выходных дадзеных. Мне трэба падзяліць значэнне радкі ў гэтым ўваходным файле толькі. такім чынам, што я не патрабую, каб слізгаць гарызантальную прагортку зноў і зноў пры праверцы правільнасць сцвярджэнняў. папярэдні лінія, я паказаў, без расшчаплення проста даць адчуванне маёй праблемы »}}}}
дададзена аўтар user2409155, крыніца
<�Код> { «testCases»: { «case.1»: { «сцэнар»: «гэта справа 1.», «вынік»: «гэта вельмі доўгая лінія, якая не з'яўляецца лёгка readble, так што я хацеў бы. пісаць у некалькіх радках. але, я не патрабую якіх-небудзь новых радкоў ў выходных дадзеных. Мне трэба падзяліць значэнне радкі ў гэтым ўваходным файле толькі. такім чынам, што я не патрабую, каб слізгаць гарызантальную прагортку зноў і зноў пры праверцы правільнасць сцвярджэнняў. папярэдні лінія, я паказаў, без расшчаплення проста даць адчуванне маёй праблемы »}}}}
дададзена аўтар user2409155, крыніца

11 адказы

Азнаёмцеся з спецыфікацыі ! Граматыка JSON-х сімвал вытворчасць можа прымаць наступныя значэнні:

  • any-Unicode-character-except-"-or-\-or-control-character
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u four-hex-digits

Newlines з'яўляюцца «кіраўнікамі сімваламі» так, няма, вы не можаце мець літаральны пераклад радка ў межах вашай радка. Аднак вы можаце кадзіраваць яго, выкарыстоўваючы любыя камбінацыі \ п і \ г вам патрабуецца.

JSONLint інструмент пацвярджае, што ваш JSON з'яўляецца несапраўдным.


Update: And if you want to write newlines inside your JSON syntax without actually including newlines in the data, then you're even doubly out of luck. While JSON is intended to be human-friendly to a degree, it is still data and you're trying to apply arbitrary formatting to that data. That is absolutely not what JSON is about.

43
дададзена

Азнаёмцеся з спецыфікацыі ! Граматыка JSON-х сімвал вытворчасць можа прымаць наступныя значэнні:

  • any-Unicode-character-except-"-or-\-or-control-character
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u four-hex-digits

Newlines з'яўляюцца «кіраўнікамі сімваламі» так, няма, вы не можаце мець літаральны пераклад радка ў межах вашай радка. Аднак вы можаце кадзіраваць яго, выкарыстоўваючы любыя камбінацыі \ п і \ г вам патрабуецца.

JSONLint інструмент пацвярджае, што ваш JSON з'яўляецца несапраўдным.


Update: And if you want to write newlines inside your JSON syntax without actually including newlines in the data, then you're even doubly out of luck. While JSON is intended to be human-friendly to a degree, it is still data and you're trying to apply arbitrary formatting to that data. That is absolutely not what JSON is about.

43
дададзена

Азнаёмцеся з спецыфікацыі ! Граматыка JSON-х сімвал вытворчасць можа прымаць наступныя значэнні:

  • any-Unicode-character-except-"-or-\-or-control-character
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u four-hex-digits

Newlines з'яўляюцца «кіраўнікамі сімваламі» так, няма, вы не можаце мець літаральны пераклад радка ў межах вашай радка. Аднак вы можаце кадзіраваць яго, выкарыстоўваючы любыя камбінацыі \ п і \ г вам патрабуецца.

JSONLint інструмент пацвярджае, што ваш JSON з'яўляецца несапраўдным.


Update: And if you want to write newlines inside your JSON syntax without actually including newlines in the data, then you're even doubly out of luck. While JSON is intended to be human-friendly to a degree, it is still data and you're trying to apply arbitrary formatting to that data. That is absolutely not what JSON is about.

43
дададзена

Я не ўпэўнены ў вашым дакладнай патрабаванні, але адно з магчымых рашэнняў для паляпшэння «чытальнасці», каб захаваць яго як масіў.

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : ["this is a very long line which is not easily readble.",
                  "so i would like to write it in multiple lines.",
                  "but, i do NOT require any new lines in the output."]
    }
  }
}

}

Далучыцца зноў у выпадку неабходнасці з

result.join(" ")
24
дададзена
Гэта unsemantic хоць. Гэта ўцечка абстракцыі. Я хацеў бы разгледзець фармат дадзеных, зададзены такім чынам, каб быць, па сутнасці, зламаная.
дададзена аўтар Lightness Races in Orbit, крыніца
«Я хацеў бы разгледзець фармат дадзеных, зададзены такім чынам, каб быць, па сутнасці, зламаная.» Лічаць, што гэта для тэсту, хоць. Калі вы хочаце жорстка радкоў кода вы, верагодна, хочаце файл уласцівасцяў. Я б асабіста не захоўваць «рэальныя» дадзеныя ў фармаце JSON ў нармальных умовах. Але калі гэта просты спосаб перайсці ад якіх-небудзь выпрабаванняў на тэсты, а затым пайсці на гэта.
дададзена аўтар sf_jeff, крыніца
Я не магу сабе ўявіць, праектаванне інтэрфейс або JSON дакумент такім чынам, толькі для павелічэння радкі чытальнасці (толькі для адладкі прычын я думаю): | ....
дададзена аўтар Adam Dyga, крыніца
@AdamDyga на самой справе гэта можа быць карысна для таго, каб захоўваць файлы JSON ў CVS, дзе адзінка дэльты з'яўляецца лінія.
дададзена аўтар yota, крыніца
Карысна для апісання аднак, дзякуй!
дададзена аўтар Rob, крыніца

Я не ўпэўнены ў вашым дакладнай патрабаванні, але адно з магчымых рашэнняў для паляпшэння «чытальнасці», каб захаваць яго як масіў.

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : ["this is a very long line which is not easily readble.",
                  "so i would like to write it in multiple lines.",
                  "but, i do NOT require any new lines in the output."]
    }
  }
}

}

Далучыцца зноў у выпадку неабходнасці з

result.join(" ")
24
дададзена
Гэта unsemantic хоць. Гэта ўцечка абстракцыі. Я хацеў бы разгледзець фармат дадзеных, зададзены такім чынам, каб быць, па сутнасці, зламаная.
дададзена аўтар Lightness Races in Orbit, крыніца
«Я хацеў бы разгледзець фармат дадзеных, зададзены такім чынам, каб быць, па сутнасці, зламаная.» Лічаць, што гэта для тэсту, хоць. Калі вы хочаце жорстка радкоў кода вы, верагодна, хочаце файл уласцівасцяў. Я б асабіста не захоўваць «рэальныя» дадзеныя ў фармаце JSON ў нармальных умовах. Але калі гэта просты спосаб перайсці ад якіх-небудзь выпрабаванняў на тэсты, а затым пайсці на гэта.
дададзена аўтар sf_jeff, крыніца
Я не магу сабе ўявіць, праектаванне інтэрфейс або JSON дакумент такім чынам, толькі для павелічэння радкі чытальнасці (толькі для адладкі прычын я думаю): | ....
дададзена аўтар Adam Dyga, крыніца
@AdamDyga на самой справе гэта можа быць карысна для таго, каб захоўваць файлы JSON ў CVS, дзе адзінка дэльты з'яўляецца лінія.
дададзена аўтар yota, крыніца
Карысна для апісання аднак, дзякуй!
дададзена аўтар Rob, крыніца

Я не ўпэўнены ў вашым дакладнай патрабаванні, але адно з магчымых рашэнняў для паляпшэння «чытальнасці», каб захаваць яго як масіў.

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : ["this is a very long line which is not easily readble.",
                  "so i would like to write it in multiple lines.",
                  "but, i do NOT require any new lines in the output."]
    }
  }
}

}

Далучыцца зноў у выпадку неабходнасці з

result.join(" ")
24
дададзена
Гэта unsemantic хоць. Гэта ўцечка абстракцыі. Я хацеў бы разгледзець фармат дадзеных, зададзены такім чынам, каб быць, па сутнасці, зламаная.
дададзена аўтар Lightness Races in Orbit, крыніца
«Я хацеў бы разгледзець фармат дадзеных, зададзены такім чынам, каб быць, па сутнасці, зламаная.» Лічаць, што гэта для тэсту, хоць. Калі вы хочаце жорстка радкоў кода вы, верагодна, хочаце файл уласцівасцяў. Я б асабіста не захоўваць «рэальныя» дадзеныя ў фармаце JSON ў нармальных умовах. Але калі гэта просты спосаб перайсці ад якіх-небудзь выпрабаванняў на тэсты, а затым пайсці на гэта.
дададзена аўтар sf_jeff, крыніца
Я не магу сабе ўявіць, праектаванне інтэрфейс або JSON дакумент такім чынам, толькі для павелічэння радкі чытальнасці (толькі для адладкі прычын я думаю): | ....
дададзена аўтар Adam Dyga, крыніца
@AdamDyga на самой справе гэта можа быць карысна для таго, каб захоўваць файлы JSON ў CVS, дзе адзінка дэльты з'яўляецца лінія.
дададзена аўтар yota, крыніца
Карысна для апісання аднак, дзякуй!
дададзена аўтар Rob, крыніца

Як я мог зразумець, што пытанне не пра тое, як перадаць радок з кантрольнымі знакамі, выкарыстоўваючы JSon , але як захаваць і аднавіць у файле JSON, дзе можна разбіць радок з кантрольнымі знакамі рэдактараў.

Калі вы хочаце захаваць шматрадковы радок у файл, то файл не будзе захоўваць правільны JSON аб'екта. Але калі вы выкарыстоўваеце JSON файлы ў вашай праграме толькі, то вы можаце захоўваць дадзеныя, як вы хочаце, і выдаліць усе пераклады радкоў з файла ўручную кожны раз, калі вы загрузіце яго ў праграму, а затым перайсці да JSon аналізатар.

Або, як варыянт, які будзе лепш, вы можаце мець ваш JSON зыходных файлы дадзеных, дзе адрэдагаваныя джала, як вы хочаце, а затым выдаліце ​​ўсе новыя лініі з некаторай карыснасцю сапраўднага JSON файл, які праграма будзе выкарыстоўваць.

3
дададзена

Як я мог зразумець, што пытанне не пра тое, як перадаць радок з кантрольнымі знакамі, выкарыстоўваючы JSon , але як захаваць і аднавіць у файле JSON, дзе можна разбіць радок з кантрольнымі знакамі рэдактараў.

Калі вы хочаце захаваць шматрадковы радок у файл, то файл не будзе захоўваць правільны JSON аб'екта. Але калі вы выкарыстоўваеце JSON файлы ў вашай праграме толькі, то вы можаце захоўваць дадзеныя, як вы хочаце, і выдаліць усе пераклады радкоў з файла ўручную кожны раз, калі вы загрузіце яго ў праграму, а затым перайсці да JSon аналізатар.

Або, як варыянт, які будзе лепш, вы можаце мець ваш JSON зыходных файлы дадзеных, дзе адрэдагаваныя джала, як вы хочаце, а затым выдаліце ​​ўсе новыя лініі з некаторай карыснасцю сапраўднага JSON файл, які праграма будзе выкарыстоўваць.

3
дададзена

Не вельмі добрае рашэнне, але вы можаце паспрабаваць <�моцны> hjson інструмент. Link . Гэта дазваляе пісаць тэкст шматрадковага ў рэдактары, а затым пераўтворыць яго ў адпаведны дапушчальны фармат JSON. <�Моцны> Заўвага: дадае «\ п» сімвалаў для новых ліній, але вы можаце проста выдаліць іх у любым тэкставым рэдактары з «Замяніць усё ..» функцыі.

пастскрыптум Павінна быць каментар да гэтага пытання, але не мае дастатковую колькасць РЭПО, прабачце.

2
дададзена
hjson працуе бездакорна!
дададзена аўтар gaurav, крыніца

Я лічу, што гэта залежыць ад таго, што інтэрпрэтатар JSON вы карыстаецеся ... у раўніне Javascript можна выкарыстоўваць тэрмінатара лініі

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : "this is a very long line which is not easily readble. \
                  so i would like to write it in multiple lines. \
                  but, i do NOT require any new lines in the output."
    }
  }
}
1
дададзена
Гэта правільна, але водступ прастора будзе: а \ с => З .
дададзена аўтар Andre Figueiredo, крыніца

Гэта рэалізуецца ў якасці сцэнарыста, таму што для аднаго знака не можа быць некалькі выходных charactes. Я не мог сабе ўявіць, гэта як чытач. Даволі цяжкі для выканання гэтай задачы, але даволі пашыраюцца.

String multilineJson = "{\n" +
        "prop1 = \"value1\",\n" +
        "prop2 = \"multi line\n" +
        "value2\"\n" +
        "}\n";
String multilineJsonExpected = "{\n" +
        "prop1 = \"value1\",\n" +
        "prop2 = \"multi line\\nvalue2\"\n" +
        "}\n";

StringWriter sw = new StringWriter();
JsonProcessor jsonProcessor = new JsonProcessor(sw);
jsonProcessor.write(multilineJson);

assertEquals(multilineJsonExpected, sw.toString());

рэалізацыя

public class JsonProcessor extends FilterWriter {

    private char[] curr;
    private int currIdx;

    private boolean doubleQuoted;

    public JsonProcessor(Writer out) {
        super(out);
    }

    @Override
    public void write(String str) throws IOException {
        char[] arr = str.toCharArray();
        write(arr, 0, arr.length);
    }

    @Override
    synchronized public void write(char[] cbuf, int off, int len) throws IOException {
        curr = Arrays.copyOfRange(cbuf, off, len - off);
        for (currIdx = 0; currIdx < curr.length; currIdx++) {
            processChar();
        }
    }

    private void processChar() throws IOException {
        switch (currentChar()) {
            case '"':
                processDoubleQuotesSymbol();
                break;
            case '\n':
            case '\r':
                processLineBreakSymbol();
                break;
            default:
                write(currentChar());
                break;
        }
    }

    private void processDoubleQuotesSymbol() throws IOException {
        doubleQuoted = !doubleQuoted;
        write('"');
    }

    private void processLineBreakSymbol() throws IOException {
        if (doubleQuoted) {
            write('\\');
            write('n');
            if (lookAhead() == '\n' || lookAhead() == '\r') {
                currIdx++;
            }
        } else {
            write(currentChar());
        }
    }

    private char currentChar() {
        return curr[currIdx];
    }

    private char lookAhead() {
        if (currIdx >= curr.length) {
            return 0;
        }
        return curr[currIdx + 1];
    }
}
0
дададзена