0

Jackson ライブラリを使用して JSON ドキュメントをシリアル化しようとしています。以下は、私が手動で作成した JSON ドキュメントです。ここで、Jackson を使用してこのドキュメントをシリアル化する必要があります

例-A

{
    "v" : {
        "site_id" : 0,
        "price_score" : 0.5,
        "confidence_score" : 0.2,
        "categories": {
            "123" : {
                "price_score": "0.5",
                "confidence_score": "0.2"
            },
            "321" : {
                "price_score": "0.2",
                "confidence_score": "0.4"
            }
        }
    }
}

以下のコードとJacksonを使用して、JSONドキュメントのこの部分を今まで作成できました-

例-B

{
  "v" : {
    "site_id" : 0,
    "price_score" : 0.5,
    "confidence_score" : 0.2
  }
}       

categoriesさて、以下のコードを使用して、例 B JSON ドキュメントに (例 A に示すように) 部分のリストを追加する方法を理解できませんか?

public static void main(String[] args) {

    Map<String, Object> props = new HashMap<String, Object>();
    props.put("site-id", 0);
    props.put("price-score", 0.5);
    props.put("confidence-score", 0.2);

    AttributeValue av = new AttributeValue();
    av.setProperties(props);

    /**
     * this will print out the JSON document like I shown in my Example-B
     * but I need to make it look like as in Example-A. I am not sure how
     * to achieve that?
     */
    System.out.println(av);

    // serialize it
    try {
        String jsonStr = JsonMapperFactory.get().writeValueAsString(attr);
        System.out.println(jsonStr);
    } catch (JsonGenerationException e) {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

誰でもそれを手伝ってもらえますか?

4

1 に答える 1

1

解決策1
あなたの場合、あなたはそれを行うことができます

Map<String, Object> props = new HashMap<String, Object>();
props.put("site-id", 0);
props.put("price-score", 0.5);
props.put("confidence-score", 0.2);
Map<String, String> category123 = new HashMap<String, String>();
category123.put("price_score", "0.5");
category123.put("confidence_score", "0.2");
Map<String, String> category321 = new HashMap<String, String>();
category123.put("price_score", "0.2");
category123.put("confidence_score", "0.4");
Map<String, Object> categories = new HashMap<String, Object>();
categories.put("123", category123);
categories.put("321", category321);
props.put("categories", categories);  

解決策 2:
または、追加のクラスを使用して単純化することもできます。

public class Category 
{
   private String price_score;
   private String confidence_score;

   public Category(String price_score, String confidence_score) 
   {
      this.price_score = price_score;
      this.confidence_score = confidence_score;
   }

   public Category() 
   {
   } 
   // getters/setters
}

主な方法

Map<String, Object> props = new HashMap<String, Object>();
props.put("site-id", 0);
props.put("price-score", 0.5);
props.put("confidence-score", 0.2);
Map<String, Category> categories = new HashMap<String, Category>();
categories.put("123", new Category("0.4", "0.2"));
categories.put("321", new Category("0.2", "0.5"));
props.put("categories", categories);
于 2013-09-14T22:19:26.790 に答える