0

http Web サービスから次の JSON 応答を受け取ります

{"status":100,"data":[{"name":"kitchen chair","price":25.99,"description":null}]}

今、私はこれをデシリアライズできるようにしたいと考えています。Google の Gson に出くわしました。これは、最初はいくつかの小さなテストケースでうまく機能しましたが、上記の文字列を逆シリアル化するのに苦労しています。

フィールドに項目が 1 つしかないことはわかっていdataますが、複数の項目を保持できるため、すべての応答にdataフィールドが配列として含まれています。

私はGson User Guideを読んでいましたが、理想的には と の2Responseつの属性を持つオブジェクトが必要ですが、フィールドはオブジェクトの である必要があり、おそらく Gson にとっては困難です。statusdatadataListMap

次に、これは私の問題に近い例ですが、まだよくわかりません。この例では、応答全体が配列ですが、私の JSON 文字列には 1 つの文字列要素と配列があります。

これを逆シリアル化するにはどうすればよいですか?

4

1 に答える 1

2

「Gsonにとって難しい」と思われるもので、すでに試みられたものが正確に何であるかは明らかではありません。

Gson の最新リリースでは、これを簡単に処理します。以下に例を示します。

入力.json

{
    "status":100,
    "data":
    [
        {
            "name":"kitchen chair",
            "price":25.99,
            "description":null
        }
    ]
}

Response.java

import java.util.List;
import java.util.Map;

class Response
{
  int status;
  List<Map> data;
}

GsonFoo.java

import java.io.FileReader;

import com.google.gson.Gson;

public class GsonFoo
{
  public static void main(String[] args) throws Exception
  {
    Response response = new Gson().fromJson(new FileReader("input.json"), Response.class);
    System.out.println(new Gson().toJson(response));
  }
}

出力:

{"status":100,"data":[{"name":"kitchen chair","price":25.99}]}
于 2012-07-19T23:07:55.270 に答える