0

この JSON データがあり、Java で処理しようとしています。

{  
   "status":"ok",
   "data":{  
      "user_count":3,
      "limit":20,
      "page_number":1,
      "users":[  
         {  
        "id":330,
            "name":"jeff",
            "email":"xxx@hotmail.com
         },
            "id":335,
            "name":"joe",
            "email":"xxx@hotmail.com
         }
      ]
    },
}

ステータスを取得することはできますが、すべてのユーザーを取得することはできません。動作する別の JSON サンプルがあるため、これは奇妙です。

ここに私のコードがあります:

                    results = response.getString("status");
                    if (results.equals("ok")) {
                        JSONArray records = response.getJSONArray("data");
                        for (int i = 0; i < records.length(); i++) {
                            JSONObject obj = records.getJSONObject(i);
                            JSONArray users = obj.getJSONArray("users");
                            for (int j = 0; j < users.length(); j++) {
                                JSONObject v_obj = users.getJSONObject(j);
                                Log.d("Dracula", v_obj.getString("id"));
                                Log.d("Dracula", v_obj.getString("name"));
                                Log.d("Dracula", v_obj.getString("email"));
                            }
                        }
                    }

JSON は不正な形式ですか、それとも何かですか? どんな助けでも大歓迎です。

4

2 に答える 2

2

はい、それは非常に不正です:)これが修正されたものです。

{
  "status": "ok",
  "data": {
    "user_count": 3,
    "limit": 20,
    "page_number": 1,
    "users": [
      {
        "id": 330,
        "name": "jeff",
        "email": "xxx@hotmail.com"
      },
      {
        "id": 335,
        "name": "joe",
        "email": "xxx@hotmail.com"
      }
    ]
  }
}

JSON のエラー:

  1. 電子メールの後に二重引用符の補完がありません
  2. 詳細の後の追加,:{} オブジェクト
  3. 2 番目のユーザー オブジェクトに開口部がありません{

JSON ファイルを確認するための優れたツールを次に示します。その中にJSONをコピーして貼り付けてみてください。違いがわかります

UPDATE潜在的なJavaの問題に移ります:

  1. あなたdataは配列ではなくオブジェクトですが、Javaコードではそれを1つとして解析していますJSONArray records = response.getJSONArray("data");

また、問題が実際には Web サービスにある可能性もあります。結果が 1 つしか見つからない場合、Web サービスがデータ型を配列 [] からオブジェクト {} に変更することがあります。これが、配列として解析するコードがdataこのオブジェクトに対して失敗する理由です。そのような1つのオブジェクトの配列として返すようにデータサービスを修正するdata:[{..}] か、Javaでチェックしdataて配列かオブジェクトかを確認する必要があります。

常にオブジェクトとして入ってくることを確認した場合data(JSON のコンテキストを見ると理にかなっています)、コードを反復処理ではdataなく、次のように反復処理するdata.usersように切り替えます。

 JSONObject records = response.getJSONObject("data");
 JSONArray users = records.getJSONArray("users");

  for (int j = 0; j < users.length(); j++) {
          JSONObject v_obj = users.getJSONObject(j);
           Log.d("Dracula", v_obj.getString("id"));
           Log.d("Dracula", v_obj.getString("name"));
           Log.d("Dracula", v_obj.getString("email"));
  }
于 2015-08-04T19:35:24.707 に答える