Форум: "Начинающим";
Текущий архив: 2015.03.29;
Скачать: [xml.tar.bz2];
ВнизJSON сохранить "C: temp cv.txt" и обратно загрузить TJSONObject Найти похожие ветки
← →
Denh (2013-11-19 23:43) [0]Итак есть код:
function addItemToJsonArray(jsonString: string;valueToAddInToArray:string): string;
var
LJsonObj: TJSONObject;
jp: TJSONPair;
jsArr: TJSONArray;
i: Integer;
begin
LJsonObj := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(jsonString),
0) as TJSONObject;
if not assigned(LJsonObj) then
showmessage("looks like this is not JSON")
else
begin
for i := 0 to LJsonObj.size - 1 do
begin
jp := LJsonObj.Get(i);
if jp.JsonValue is TJSONArray then
begin
jsArr := jp.JsonValue as TJSONArray;
jsArr.add(valueToAddInToArray);
end;
end;
end;
result:=LJsonObj.ToString;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:=addItemToJsonArray(edit1.text,edit2.text);
end;
он принимает JSON содержащий архив и строку которую нужно в этот архив добавить, пока добавляется что-то вроди - "бла" все хорошо, как только добавляется чтото с "\", например "c:\temp", следующее добавление элемента не проходит, потому как в строке появляются special characters, вопрос как правильно сохранять чтоб эти special characters в строку записывались в таком виде, чтоб на следующий раз их можно было опять грузить?
← →
[ВладОшин] © (2013-11-20 10:02) [1]а так если?
c:\\temp
← →
Palladin © (2013-11-20 10:19) [2]что бы работать с JSON надо знать что это такое
← →
Den (2013-11-20 22:21) [3]что бы работать с JSON надо знать что это такое - ух ты емае а мужики то и не знают:(
Ответ нашел уже всем спасибо, за что люблю всетаки Delphi сообщество это всегда за желание человеку не помочь а чето ляпнуть типа да ты не знаешь ниче.
← →
Den (2013-11-20 23:45) [4]А ну да и если кому интересно то вот - http://stackoverflow.com/questions/11785963/how-do-i-convert-a-string-to-and-from-json-with-escaped-special-characters-using
← →
[ВладОшин] © (2013-11-21 09:18) [5]в [1] было предложение попробовать экранирование
судя по ответу: Result + ESCAPE + REVERSE_SOLIDUS;
ESCAPE = "\";
REVERSE_SOLIDUS = "\";
это именно оно и было.
Тем не менее, вопрос что получится, если экранировать "\" остался не отвеченным.
За что мне нравится залетный воробей - нагадит и улетит
← →
Den (2013-11-22 13:26) [6]Тем не менее, вопрос что получится, если экранировать "\" остался не отвеченным. - странно, вот же в этом ответе все -
function EscapeString(const AValue: string): string;
const
ESCAPE = "\";
// QUOTATION_MARK = """;
REVERSE_SOLIDUS = "\";
SOLIDUS = "/";
BACKSPACE = #8;
FORM_FEED = #12;
NEW_LINE = #10;
CARRIAGE_RETURN = #13;
HORIZONTAL_TAB = #9;
var
AChar: Char;
begin
Result := "";
for AChar in AValue do
begin
case AChar of
// !! Double quote (") is handled by TJSONString
// QUOTATION_MARK: Result := Result + ESCAPE + QUOTATION_MARK;
REVERSE_SOLIDUS: Result := Result + ESCAPE + REVERSE_SOLIDUS;
SOLIDUS: Result := Result + ESCAPE + SOLIDUS;
BACKSPACE: Result := Result + ESCAPE + "b";
FORM_FEED: Result := Result + ESCAPE + "f";
NEW_LINE: Result := Result + ESCAPE + "n";
CARRIAGE_RETURN: Result := Result + ESCAPE + "r";
HORIZONTAL_TAB: Result := Result + ESCAPE + "t";
else
begin
if (Integer(AChar) < 32) or (Integer(AChar) > 126) then
Result := Result + ESCAPE + "u" + IntToHex(Integer(AChar), 4)
else
Result := Result + AChar;
end;
end;
end;
end;
Дело ж не в ответе и не в придумывании своих костылей, а дело в том что я думал что делаю просто не то что-то, DBXJSON этож идет в стандартной поставке, JSON это ж просто набор букв в определенной последовательности, стандарт типа, так договорились делать и делают, вот я и думал что если есть стандартная библиотека то и работать она должна правильно, а выяснилось что надо свои костыли писать чтоб оно воркало. Так что все ответы про воробьев и про то что надо знать как оно работает ой вэй, короче и без вас разберусь:)
← →
[ВладОшин] © (2013-11-22 13:38) [7]такие люди психуют, уходят..
ты ж для тут - все и немного больше! твое появление, как солнце, а обсирание - как манна небесная.
Нет, я не могу, я щаз заплачу..
не уходи! Все прощу!!!!!!!!
← →
Den (2013-11-22 13:40) [8]Тю а кто вам сказал что я куда-то ушел:)
← →
illya (2014-02-06 19:11) [9]вот еще, ToBytes метод возвращает строку с escape-символамию правда все Unicode символы возаращеются кодами. вот пример:
procedure TForm1.Button6Click(Sender: TObject);
var
s:string;
j:TJsonString;
rez:TBytes;
begin
s:="c:\te"st\"#10#13"New Line ё-=ъх.э,..s[waaàéèçù2"#$D840#$DC01" "#$006F+#$0308;
j:=TJsonString.Create(s);
SetLength(rez, j.EstimatedByteSize());
j.ToBytes(rez,0);
label1.Caption:=s;
label2.Caption:= TEncoding.UTF8.GetString(rez);
end;
результат:
"c:\\te\"st\\\n\rNew Line \u0451-=\u044A\u0445.\u044D,..s[waa\u00E0\u00E9\u00E8\u00E7\u00F92\uD840\uDC01 o\u0308"
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2015.03.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c