[Delphi] парсинг json использую SuperObject

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cardons, 1 Jul 2013.

  1. cardons

    cardons Elder - Старейшина

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    Имею вот такой JSON задача получить все ID внутри массива.

    {
    "google.ru":[
    3395968357,
    3215823634,
    2188740119,
    219222022,
    2193906604,
    2685240517,
    1668160197
    ]
    }
     
  2. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    с таким видом json будут проблемы в ISuperObject из-за точки в имени, то есть к примеру есть такая строка в json:

    {"google":[3395968357,3215823634,2188740119,219222022,2193906604,2685240517,1668160197]}

    она спокойно парсится так:
    Code:
    procedure trololo();
    begin
     var
      item, json: ISuperObject;
    begin
      json:= SO('{"google":[3395968357,3215823634,2188740119,219222022,2193906604,2685240517,1668160197]}');
      json:= json.O['google'];
    
      if Assigned(json) then
        for item in json do
          Memo.Lines.add(item.AsString);
    
    end;
    а вот строка вида:

    {"google.ru":[3395968357,3215823634,2188740119,219222022,2193906604,2685240517,1668160197]}

    при использовании кода, что выше уже не распарсится, как хотелось бы, и проблема тут в json.O['google.ru'];
    в ISuperObject есть возможность использовать "пути" и json.O['google.ru'] будет интерпретироваться, как разбор вот такой json строки:

    {"google":{"ru":[3395968357,3215823634,2188740119,219222022,2193906604,2685240517,1668160197]}}

    возможное решение это правка исходника и удаление точки в файле superobject.pas
    Code:
    2291:   delimiters = ['"', {'.', } '[', ']', '{', '}', '(', ')', ',', ':', #0];
    но это решение на свой страх и риск =)
     
    #2 alexey-m, 2 Jul 2013
    Last edited: 2 Jul 2013