4

さまざまなスレッドを読み、同様の問題を見つけましたが、特定の問題の解決策を見つけるのにかなり失敗しています.

JSONObject orr = (JSONObject)orderRows.get("orderRows");
System.out.println("data in orr = " + orr + "orr's type = " + orr.getClass());

戻り値:

orr のデータ = {"470":[{"locationId":2,"quantity":1,"productId":1007}],"471":[{"locationId":2,"quantity":1," productId":1008}]}orr のタイプ = クラス org.json.simple.JSONObject

このデータを配列/リスト/キー 470,471 を使用してデータを取得できるものに取得しようとしています。

任意の提案やポインタは、多くのおかげで高く評価されています...

明確にするために:

JSONObject orr = (JSONObject)orderRows.get("orderRows");
        JSONArray orderOne = (JSONArray)orr.get("471");
        System.out.println(orderOne);
        System.out.println(orderOne.get(0));
        JSONObject orderOneKey = (JSONObject)orderOne.get(0);
        System.out.println(orderOneKey.get("productId"));

これは私が求めているものですが、この番号がどうなるかわからないため、 orr.get("471") を実行できないことは明らかです。

編集: どうやら私は自分の質問に 8 時間答えることはできません:

友人の助けといくつかのいじりのおかげで、私は解決策を見つけました。それは最も雄弁ではないと確信していますが、それはまさに私が求めていたものです:

for(Object key: orr.keySet()) {

                JSONArray orderOne = (JSONArray)orr.get(key);
                JSONObject ordervalue = (JSONObject)orderOne.get(0);
                System.out.println(ordervalue.get("productId"));
        }

助けと提案をしてくれてありがとう。

4

4 に答える 4

2

Thanks to help from a friend and some fiddling, I found a solution, I'm sure it's not the most eloquent, but it's exactly what I was after:

for(Object key: orr.keySet()) {

                JSONArray orderOne = (JSONArray)orr.get(key);
                JSONObject ordervalue = (JSONObject)orderOne.get(0);
                System.out.println(ordervalue.get("productId"));
        }

Thanks for the help and suggestions guys.

于 2012-10-30T09:04:12.790 に答える
0

応答のデータは JSONObject 型です (中かっこ {} を参照)。したがって、最上位オブジェクトには 470 と 471 の 2 つの「フィールド」があります。これらのフィールドから返されるデータはどちらも配列です。これらの配列にはそれぞれ 1 つの項目しかなく、どちらもオブジェクトです。したがって、データをフェッチする例を次に示します。

JSONObject jsonObject = (JSONObject)orderRows.get("orderRows");
JSONArray firstArray = jsonObject.getJSONArray("470");
JSONArray secondArray = jsonObject.getJSONArray("471");
JSONObject firstObject = firstArray.get(0);
int locationId = firstObject.getId("locationId");
/*...etc...*/

取り出したら、このデータを任意の構造に変換して、この時点からアクセスしやすくすることができます。

于 2012-10-29T14:58:11.963 に答える
0

データバインディングのサポートを提供するライブラリを使用できます。Genson http://code.google.com/p/genson/を試すことができます。高速で使いやすく、優れた機能がいくつかあります。問題の例を次に示します。

// first define a class matching your json
class Product {
  private int locationId;
  private int quantity;
  private int productid;

  // setter & getters
}

// then use genson
Map<String, Product[]> productsMap = new Genson().deserialize(jsonStream, new GenericType<Map<String, Product[]>>() {});
于 2012-10-29T15:01:08.810 に答える
0

次のこともできます。

JSONArray jsonArr = new JSONArray();
jsonArr.put(jsonObj);

JSONオブジェクト全体をJSON配列に入れたい場合。

于 2014-02-22T13:45:19.487 に答える