Конференция "Начинающим" » uLkJSON, как взять строку? [D7]
 
  • ВладОшин © (21.02.18 10:15) [0]
    Надо распарсить json, взял самое простое - uLkJSON, многие советуют, в т.ч. и местные
    Трудность возникла сразу же. Думаю, что не так делаю, потому что.. ну не советовали бы..

     
     mmo1.Lines.Text := S;
     jO1 := TlkJSON.ParseText(S) as TlkJSONobject;

     Print(jO1.Field['response'].Field['items'].SelfTypeName);
     jL1 := TlkJSONlist(jO1.Field['response'].Field['items']);

     for i := 0 to jL1.Count - 1 do
     begin
       jo4 := TlkJSONobject(jL1.Child[i]);
       Print(jO4.Field['id'].SelfTypeName);  //jsNumber
       Print(jO4.Field['id'].Value);               // Ok
       Print(jO4.Field['title'].SelfTypeName);   //jsString

       Print('v1=' + jO4.Field['title'].Value);  // v1 - empty

       s := jo4.getString('title');
       Print('v2=' + s);                    // v2 - empty

       jS := TlkJSONstring(jO4.Field['title']);
       Print('v3=' + jS.Value);         // v3 - empty
     end;



    Вывод в мемо
    {"response":{"count":236,"items":[{"id":19,"title":"Австралия"},{"id":20,"title" :"Австрия"},{"id":5,"title":"Азербайджан"},{"id":21,"title":"Албания"},{"id":22, "title":"Алжир"}]}}

    jsList
    jsNumber
    19
    jsString
    v1=
    v2=
    v3=
    jsNumber
    20
    jsString
    v1=
    v2=
    v3=
    .. и т.п.

    Как получить значение?
  • ВладОшин © (21.02.18 10:29) [1]
    Почему, когда задашь вопрос, посещает мысль ))

    Полез в TlkJSON.ParseText
    и попал на
    // incorrect string!!!
         if j=0 then
           begin
             result := false;
             exit;
           end;

    наверное, неправильный json с его т.з.
  • ВладОшин © (21.02.18 10:42) [2]
    опять не так..

    {$ifdef USE_D2009}
       js.FValue := UTF8ToString(ws); // если бы
    {$else}
       js.FValue := UTF8Decode(ws); // тут
    {$endif}

    ws = 'Австралия'
    а
    js.FValue = ''

    UTF8Decode('Австралия')  = ''
    ясно,  он сам UTF8Decode применяет, а я уже подаю на вход прогнав через UTF8Decode

    -------
    Все, понял

     jO1 := TlkJSON.ParseText(UTF8Encode(S)) as TlkJSONobject;

    {"response":{"count":236,"items":[{"id":19,"title":"Австралия"},{"id":20,"title" :"Австрия"},{"id":5,"title":"Азербайджан"},{"id":21,"title":"Албания"},{"id":22, "title":"Алжир"}]}}
    jsList
    jsNumber
    19
    jsString
    v1=Австралия
    v2=Австралия
    v3=Австралия
    ..

    Не поверите, вчера тупил часа 2 ) И сегодня со вчерашними мыслями, полез задавать вопрос. Пардон ))
 
Конференция "Начинающим" » uLkJSON, как взять строку? [D7]
Есть новые Нет новых   [119006   +11][b:0][p:0.001]