2

複数のリクエストからのレスポンスを持つ大きな JSON オブジェクトを扱っています。

そして、私が取り組んでいる部分は、必要なオブジェクトが少なく、常に前面にあるとは限りません。たとえば、json 構造は次のとおりです。

**

json = {
    mainDocument: {
        element1: {
            element11: "value11",
            element12: {
                element121: "value121"
                }
            },
        element2: {
            element21: {
                element211: {
                    element2111: "value2111",
                    element2112: {
                        element21121: "value21121"
                        }
                    }
                },
            element22: "value22"
            }
        }
    }

**

この構造は、リクエストが成功したかどうかによって変化する可能性があります。

ここで、要素 11、要素 22、要素 21121 の値を持つ Java オブジェクトを作成します。

現在、jsonをチェックして、オブジェクトのセッターを使用しています。

GSONにこれを処理させ、jsonを自分で解析する必要がない方法があるかどうか知りたいです。

よろしくお願いいたします。

4

1 に答える 1

2

あなたの質問をよく理解しているかどうかはわかりませんが、Gson で JSON 応答を逆シリアル化するには、応答のデータをカプセル化するクラス構造を作成するのが最も適切な方法だと思います。あなたの場合、次のようなものです:

class Response
  MainDocument mainDocument

class MainDocument
  Element element1
  Element element2

class Element
  ...

JSON からのデータのみが必要な場合は、クラス構造で属性を省略でき、Gson はそれらを無視します。そして、オブジェクトが異なる応答で異なるコンテンツを持つことができる場合、次のようなものを持つことができます:

class Response
  MainDocument mainDocument
  Error error

そして、Gsonは、ルート要素mainDocument(質問のようなもの)またはルート要素の両方を使用して応答errorを解析します...これにより、解析を可変応答に適応させることができます...

明らかに、このアプローチに従うには、考えられるすべての応答構造を知る必要があります。JSON 応答が完全に可変であり、それをラップするクラス構造を作成できないという問題がある場合は、次のように手動で解析することができます。

JsonParser parser = new JsonParser();
JsonObject rootObj = parser.parse(jsonString).getAsJsonObject();    
String element21121 = rootObj
                       .getAsJsonObject("mainDocument")
                       .getAsJsonObject("element2")
                       .getAsJsonObject("element21")
                       .getAsJsonObject("element211")
                       .getAsJsonObject("element2112")
                       .getAsString("element21121");
于 2013-06-03T17:55:08.310 に答える