Разбор на JSON низ без кавички

Имам код като по-долу (просто редактира JSON и поставя нови неща на място, посочено от JSONPath):

JToken jp = JToken.Parse(json);
IEnumerable<JToken> nd = jp.SelectTokens(path);

JToken newj = JToken.Parse(newval);

foreach (JToken vl in nd)
    ((JToken)value).Replace(newj);

json, path, newval са низове. Нямам проблем, когато се опитвам да добавя нов int, float, date, bool, null и т.н.... Проблемът е, когато се опитвам да добавя низ. Форматът с кавички е правилен ("нов низ"), но трябва да добавя и низ без кавички, но имам изключение ("Неочакван край при четене на JSON. Път ''[...]).

Има ли опция за анализиране на низ без кавички?


person James The Evangelist    schedule 13.04.2016    source източник
comment
Как можем да помогнем, освен ако не публикувате Json низа? Освен това - защо очаквате да анализирате низ, когато стойността не е низ, т.е. не е затворена в кавички?   -  person Panagiotis Kanavos    schedule 13.04.2016
comment
Може да е всеки валиден JSON. Получавам стойност за редактиране на потребител на формуляр, така че ако потребителят е забравил за кавички (ако иска да добави низ), не знам дали има някакъв начин да добавя кавички в кода.   -  person James The Evangelist    schedule 13.04.2016
comment
JSON използва кавички за разделяне на низове. Ако въведеното няма кавички, това не е валиден JSON. Вие също не можете да познаете как да възстановите - новите редове са валидни в низ, така че останалата част от файла може да се счита за единичен низ. Освен това, защо потребител ще въведе текста директно? Не трябва ли да има стъпка за проверка, която да им попречи да създадат невалиден JSON?   -  person Panagiotis Kanavos    schedule 13.04.2016
comment
Какво е "низ без кавички"? Кавичките се използват само в C# за работа с низови стойности, но когато става въпрос за сериализация, той сериализира низ без кавички. Но форматът json изисква кавички за двойката ключ/стойност и сериализаторът автоматично ги добавя, за да отговарят на изискванията за форматиране.   -  person Fabjan    schedule 13.04.2016
comment
@Fabjan валиден низ за JSON от гледна точка на C# е \string\. Искам да анализирам низ, който изглежда като низ (без екраниране).   -  person James The Evangelist    schedule 13.04.2016
comment
Символите за избягване на @JamesTheEvangelist са само там, защото в противен случай не е възможно да се използват двойни кавички вътре в приложението C#. Така че този низ - \text\ вътре в приложението c#, което се сериализира, ще стане текст, което е точно как трябва да бъде форматирана json стойността - propname: value   -  person Fabjan    schedule 13.04.2016


Отговори (1)


Низ в JSON е дефиниран като

Низът е поредица от Unicode кодови точки, обвити в кавички (U+0022).

Ако въведеното от вас съдържа нецифрови знаци, които не са оградени с кавички, имате невалиден JSON низ.

Между другото, JSON също не дефинира дати. Форматът ISO 8601 се използва по конвенция.

person Panagiotis Kanavos    schedule 13.04.2016
comment
Както написахте в коментар - сега проверявам текстовото поле с въвеждане и не позволявам на потребителите да пишат стойности без кавички. - person James The Evangelist; 13.04.2016
comment
Защо сам не опаковаш Strings в \"? - person Toxantron; 13.04.2016
comment
@Toxantron, защото е невъзможно да се познае в кода. JSON низовете могат да имат нови редове, което означава, че всичко до края на файла може да бъде валиден низ. Не можете дори да предположите, че даден низ не пресича линии, тъй като текстът се въвежда от крайните потребители. - person Panagiotis Kanavos; 13.04.2016