0

次のようなJavaでネストされたJSON構造を単純に解析する方法を尋ねたかっただけです。

{
   "goods":{
      "NY Store":[
         {
            "product":"Teddybear",
            "available":"20"
         },
         {
            "product":"Mountain bike",
            "available":"0"
         }]
      "LA Store":[
         {
            "product": ....and so on

すべての店舗からすべての商品を取得したいのですが、リストがかなり大きい (200 店舗)。ヒントやヒントを教えてください。

4

4 に答える 4

2

これは、Jackson ライブラリへの特定のユース ケースの簡単な紹介です。

import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize;

public class JSONTest {
    /**
     * @param args
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonGenerationException
     */
    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
        HashMap<String, ArrayList<InventoryItem>> fs = new HashMap<String, ArrayList<InventoryItem>>();
        for (int i = 0; i < 5; i++) {
            ArrayList<InventoryItem> its = new ArrayList<InventoryItem>();
            its.add(new InventoryItem("teddy", 20));
            its.add(new InventoryItem("diny", 10));
            fs.put(Long.toString(System.nanoTime()), its);
        }
        StoreContianer g = new StoreContianer(fs);
        ObjectMapper objm = new ObjectMapper();
        StringWriter sw = new StringWriter();
        objm.writeValue(sw, g);
        System.out.println(sw.toString());
        StoreContianer c = objm.readValue(
                "{\"goods\":{\"55278650620460\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}],\"55278650631327\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}],\"55278650628131\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}],\"55278650582748\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}],\"55278650624615\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}]}}",
                StoreContianer.class);
        StringWriter sw2 = new StringWriter();
        objm.writeValue(sw2, c);
        System.out.println(sw2.toString());
    }
}

@JsonSerialize
class StoreContianer {
    private final HashMap<String, ArrayList<InventoryItem>> goods;

    public StoreContianer(@JsonProperty("goods") HashMap<String, ArrayList<InventoryItem>> goods) {
        this.goods = goods;
    }

    public HashMap<String, ArrayList<InventoryItem>> getGoods() {
        return goods;
    }
}

@JsonSerialize
class InventoryItem {
    private final String product;
    private final int available;

    public InventoryItem(@JsonProperty("product") String product, @JsonProperty("available") int available) {
        this.product = product;
        this.available = available;
    }

    public String getProduct() {
        return product;
    }

    public int getAvailable() {
        return available;
    }
}
于 2012-05-05T01:14:23.243 に答える
1

なぜ図書館を利用しないのですか?http://www.json.org/java/

具体的には、

public JSONObject(String source) throws JSONException {
        this(new JSONTokener(source));
}
于 2012-05-05T00:48:58.527 に答える
0

このGoogle ライブラリは、JSON でネストされたオブジェクトを解析するのに非常に強力であることがわかりました。

List<String> products = JsonPath.read(json, "$.goods.NY Store[*].product");

これにより、各「NY Store」リスト内のすべての製品のリストが返されます。

于 2014-09-27T00:31:53.490 に答える