0

このトピックについてすでに多くの質問が寄せられていることは知っていますが、ここで立ち往生しており、かなりばかげていると確信しています。

次のような JSON Api を解析しています (ここでは名前を変更して簡略化しています)。

{
"merchant": {
    "name": "TestCo",
    "id": 108
},
"category": [
    {
        "merchant_id": 108,
        "category_name": "Baby Supplies",
        "category_id": 57,
    },
    {
        "merchant_id": 108,
        "category_name": "Dining",
        "category_id": 59,
    }
]}

次のように定義されたラッパークラスがあります。

public class WrapperObject {
  public MerchantObject merchant;
  public List<CategoryObject> category;}

マーチャントとカテゴリの両方が、適切に定義された独自のクラスです。次に、次のように逆シリアル化を試みます。

collectionType = new TypeToken<List<WrapperObject>>() {}.getType();
List<WrapperObject> wrapperObject = new Gson().fromJson(response, collectionType);

これは爆発し、GSON は「これは JSON 配列ではありません」と報告します。

これは、API が変更された先週までは完全に機能していました。JSON の唯一の違いは、以前は次のようになっていたことです (データを囲む余分なラッピング配列に注意してください)。

[{
    "merchant": {
        "name": "TestCo",
        "id": 108
    },
    "category": [
        {
            "merchant_id": 108,
            "category_name": "Baby Supplies",
            "category_id": 57,
        },
        {
            "merchant_id": 108,
            "category_name": "Dining",
            "category_id": 59,
        }
    ]}]

新しい JSON を解析するようにコードを調整するにはどうすればよいですか? NB、私は JSON を制御できません。ありがとう!

4

1 に答える 1

1

古い応答を囲む角括弧は、(この場合は 1 つの要素の) 配列を示します。新しい API は、ラッパー オブジェクトの配列ではなく、ラッパー オブジェクトのみを返すようです。これは機能しますか?

wrapperType = new TypeToken<WrapperObject>() {}.getType();
WrapperObject wrapperObject = new Gson().fromJson(response, wrapperType);
于 2012-10-30T21:04:44.233 に答える