0

私はこのJSONを持っています

{"A":"valA",
"B":["valB"],
"C":"valC",
"D":"valD",
"data":[{
    "data1":"dval1",
    "data2":"dval2",
    "data3":"dval3",
        "data4":"dval4",}],
"F":"valF"}

Javaオブジェクト:

public class ABCDObject {
        private String A;
        private String B;
        private String C;
        private String D;
        private List<String> data = new ArrayList<String>(){
                {
                        add("data1");
                        add("data2");
                        add("data3");
                        add("data4");
                        }
                };
        private String F;

        //getters for the above A,B,C,D, and F 
                public List<String> getData() {
                return data;
        }

メインクラス

Gson gson = new Gson();
        ABCDObject abcdObj = gson.fromJson(response, ABCDObject.class);

私はCの値にアクセスしようとしています

abcdObj.getC();

エラーcom.google.gson.JsonSyntaxExceptionが発生します:java.lang.IllegalStateException:文字列が必要ですが、9行17列でBEGIN_ARRAYでした

もう1つの質問は、データの値にアクセスする方法->data1などです。

4

1 に答える 1

2

JSONは、次のようなオブジェクトと一致しません。

  • BはJSONの配列であり、文字列はABCDObject
  • dataJSONに4つのプロパティを持つオブジェクトの配列、およびに文字列の配列ですABCDObject

例を挙げて編集

次の2つのクラスを使用し、不正な形式のJSON(data4の後の偽のコンマ)を修正すると、これは期待どおりに機能します。

データ-「データ」配列の各要素を保持します。各データオブジェクトには4つのデータフィールドがあります。

public class Data {
    private String data1;
    private String data2;
    private String data3;
    private String data4;
    // Plus getters, setters, toString
}

JsonHolder -JSONオブジェクト全体をカプセル化します。

import java.util.List;

public class JsonHolder {
    private String A;
    private List<String> B;
    private String C;
    private String D;
    private List<Data> data;
    private String F;
    // Plus getters, setters, toString
}

サニティーチェック

public static void main(String[] args) {
    Gson gson = new Gson();
    JsonHolder json = gson.fromJson(JSON_STRING, JsonHolder.class);
    System.out.println(json);
}

出力

JsonHolder{A='valA', B=[valB], C='valC', D='valD', data=[Data{data1='dval1', data2='dval2', data3='dval3', data4='dval4'}], F='valF'}

Note that attempting to work around the malformed JSON by using JsonReader.setLenient(true) won't work in this case; it only handles extra commas at the end of an array (collection), not in an object itself as your example JSON contains.

于 2012-05-30T12:15:00.960 に答える