1

私のjsonオブジェクトの形式は次のとおりです。

   String jsonObjRecv =  {
      "response":{
       "respobj":{
        "id":<int>,
        "number":<string>,
        "validated":<boolean>
         }
        },
        "status":"ok",
        "errors":null
        }

コードが次の場合に機能します。

        JSONObject jsonObjCont = new JSONObject(jsonObjRecv);
        String getString= jsonObjCont.toString(2);

この場合、 getString != null でデータを受け取ることができますが、JSON オブジェクトのネストされたデータを次のように取得しようとすると、次のようになります。

        JSONObject jsonObjCont = new JSONObject(jsonObjRecv);
        JSONObject regNumber = jsonObjCont.getJSONObject("respobj");
        String number= regNumber.getString("number");

それは動作しません。

GSON ライブラリを使用しようとしましたが、次の場合に機能します。

public String parse(String jsonObjRecv) {
    JsonElement jelement = new JsonParser().parse(jsonObjRecv);
    String result = jelement.toString();
    return result;

動作しません:

public String parse(String jsonObjRecv) {
    JsonElement jelement = new JsonParser().parse(jsonObjRecv);
    JsonObject jobject = jelement.getAsJsonObject();
    jobject = jobject.getAsJsonObject("respobj");

    String result = jobject.get("number").toString();
    return result;

私の間違いはどこですか?

4

1 に答える 1

1

問題は、JSON オブジェクトに正しくアクセスしていないことです。これは、responseオブジェクトを含むオブジェクトを含むrespobjオブジェクトです。

Gson例を次に示します。responseコード内のコメントに注意してください。オブジェクト取得してから、そこからを取得する必要がありますrespobj

public static void main( String[] args )
{
    String jsonObjRecv =  "{\"response\":{\"respobj\":{\"id\":1,\"number\":\"22\",\"validated\":true}},\"status\":\"ok\",\"errors\":null}";

    JsonElement jelement = new JsonParser().parse(jsonObjRecv);
    JsonObject jobject = jelement.getAsJsonObject();

    // Here is where you're making an error. You need to get the outer
    // 'response' object first, then get 'respobj' from that.
    jobject = jobject.getAsJsonObject("response").getAsJsonObject("respobj");

    String result = jobject.get("number").getAsString();

    System.out.println(result);

}

出力:

22

追加する編集:getAsString()対を使用したことに注意toString()-後者を使用すると、値の周りに引用符が含まれる生のJSONが取得されます(たとえば、出力は になります"22"

于 2013-02-03T22:56:23.367 に答える