4

次のJSONを解析する必要がありますが、D2007でそれを行う方法がわかりません.uJSONは、この値にアクセスする方法を教えてもらえますか?

{
    "id": "40",
    "created_at": "2013-08-02 20:50:28",
    "delivery_at": "2013-08-02 20:50:28",
    "cid": "7",
    "firstname": "Joe",
    "lastname": "Average",
    "street": "Joes Place",
    "items": [
        {
            "id": 601,
            "price": 25,
            "name": "Pizza Party 40x60 cm",
            "qty": 1,
            "opt": 8,
            "extras": [
                [
                    "Salmon",
                    0
                ],
                [
                    "Spinach",
                    1.5
                ],

            ]
        }
    ],
    "eMail": "me@examble.com"
}

前もって感謝します!

編集:間違ったjsonを修正しました(完全に間違っているわけではありませんが、意図したものではありません)

4

1 に答える 1

6

Rufo 卿のおかげで、SuperObject で試してみたところ、動作するようになりました。ここで私の解決策が他の人に役立つことを願っています。それが最短の方法かどうかはわかりませんが、うまくいきます。

ただし、短いコードを記述できる場合は、この回答を自由に編集してください。(また、私の下手な英語を訂正していただければ;)

var
   order, pos: ISuperObject;
   firstname, lastname, street, created_at, delivery_at, cid, eMail : String;
   id, i : Integer;
begin

       order := SO(<jsontext>);

       id := order.AsObject.I['id'];
       fistname := order.AsObject.S['firstname'];
       lastname := order.AsObject.S['lastname'];
       street := order.AsObject.S['street'];
       cid := order.AsObject.S['cid'];
       eMail := order.AsObject.S['eMail'];
       created_at := order.AsObject.S['created_at'];
       delivery_at := order.AsObject.S['delivery_at'];

       // do some stuff with your values
       // and next are the articles of our pizza order ;)
       for pos in order['items'] do begin

           // get the values like this
           ShowMessage(pos['name'].AsString)
       end;

       // and now the array of extra ingredients for an particular article

       for i := 0 to pos['extras'].AsArray.Length - 1 do begin

            // do some stuff here we Show it again only for demonstration purpose
            ShowMessage(pos['extras[' + IntToStr(i) + '][0]'].AsString)
       end

end;
于 2013-08-04T08:17:44.920 に答える