如何将数组放入Hashmap以编码JSON对象

时间:2016-12-28 22:24:58

标签: java arrays json serialization hashmap

我尝试使用json-simple 1.1.1发送API调用,并将字段和值保存为HashMap。我应该发送这些参数:

{ api_key : string,
  product_id : string,
  name : string,
  tax_rates : array }

这是一个HashMap示例:

HashMap<String,Object> arg = new HashMap<String, Object>();
            arg.put("product_id","42");
            arg.put("name", "EKOS");
            arg.put("tax_rates", taxarray);

我也将taxarray保存为HashMap:

HashMap<String, Object> taxarray = new HashMap<String, Object>();
            taxarray.put("name","EKOS");
            taxarray.put("type", "type_value_fixed");
            taxarray.put("value", "56");

但是当我执行API调用时,它会重新发生错误:参数&#39; tax_rates&#39;无效。所需的参数类型是一个数组。

我一直试图将taxarray HashMap保存为JSONArray。你能帮帮我吗?

另一个问题:如何在一个&#34; tax_rates&#34;中保存2个或更多的税收?这是一个例子:

 HashMap<String,Object> arg = new HashMap<String, Object>();
                arg.put("product_id","42");
                arg.put("name", "EKOS");
                arg.put("tax_rates", array [
                                     taxarray1[],
                                     taxarray2[]
                                           ]);

2 个答案:

答案 0 :(得分:1)

你应该有这样的东西 - 税收等级:

public class Tax {
    String name;
    String type;
    Integer[] values;

    public Tax(String name, String type, Integer[] values) {
        this.name = name;
        this.type = type;
        this.values = values;
    }   
}

然后使用Tax类的对象数组而不是tax_rates : array的HashMap。

此代码使用google json:

Map<String, Object> arg = new HashMap<String, Object>();
arg.put("product_id", "42");
arg.put("name", "EKOS");
arg.put("tax_rates",
                new Tax[] { new Tax("EKOS", "type_value_fixed", new Integer[] { 1, 2, 3 }),
                        new Tax("ABC", "type_value_fixed", new Integer[] { 4, 5 }),
                        new Tax("DEF", "type_value_fixed", new Integer[] { 6, 7}) });

Gson gson = new Gson();

System.out.println(gson.toJson(arg));

会给你这样的json:

{
  "product_id": "42",
  "name": "EKOS",
  "tax_rates": [
    {
      "name": "EKOS",
      "type": "type_value_fixed",
      "values": [
        1,
        2,
        3
      ]
    },
    {
      "name": "ABC",
      "type": "type_value_fixed",
      "values": [
        4,
        5
      ]
    },
    {
      "name": "DEF",
      "type": "type_value_fixed",
      "values": [
        6,
        7
      ]
    }
  ]
}

答案 1 :(得分:0)

tax_rates必须是一个数组,所以这样做:

List<Double> taxRates = new ArrayList<Double>();
taxRates.add(19);
taxRates.add(17.5);

Map<String,Object> arg = new HashMap<String, Object>();
arg.put("product_id","42");
arg.put("name", "EKOS");
arg.put("tax_rates", taxRates);