Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
15-1407258646
Вова
2014-08-05 21:10
2015.03.29
Си в Делфи


4-1271373470
archvalentin
2010-04-16 03:17
2015.03.29
системное время на удаленном компьютера


15-1407918944
Друг
2014-08-13 12:35
2015.03.29
Помогите настроить VPN и браузер


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


2-1391686016
XCoder
2014-02-06 15:26
2015.03.29
Возврат результата из вложенной функции





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский