Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.03.29;
Скачать: CL | DM;

Вниз

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&#224;&#233;&#232;&#231;&#249;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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
15-1408003458
NailMan
2014-08-14 12:04
2015.03.29
Никому не интересна работа программера Delphi?


2-1391642421
Drowsy
2014-02-06 03:20
2015.03.29
TibDataSet фильтруется через Filter,Filtered?


15-1407258646
Вова
2014-08-05 21:10
2015.03.29
Си в Делфи


15-1408018598
Дмитрий СС
2014-08-14 16:16
2015.03.29
Как это называется?


15-1407875402
Юрий
2014-08-13 00:30
2015.03.29
С днем рождения ! 13 августа 2014 среда