2016-12-28 89 views
1

我试图使用json-simple 1.1.1发送API调用,并将字段和值保存为HashMap。我应该把这些参数:如何将数组放入HashMap中以编码JSON对象

{ 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调用它重新发生错误:参数'tax_rates'无效。所需的参数类型是一个数组。

我一直在尝试将taxarray HashMap另存为JSONArray。你能帮我解决这个问题吗?

另一个问题:如何在一个“tax_rates”内保存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[] 
              ]); 
+0

作为一个建议您应该使用Json对象来存储对象,例如:{ “product_id”:42, “名称”: “EKOS”, “tax_rates”:{ “一”: “B”, “C”: “d”, “E”: “F” } } – user1211

+0

唔...我不会推荐这种方法。 'HashMap'不等同于JavaScript对象;其目的是捕获实现相同接口的对象。虽然你可以得到这个工作,但它不是Java的方式。我会建议尝试像https://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/这样的方法来使用现有工具将您的JSON映射到捕获到的Java类您的期望结构更多的Java方式。 – sadakatsu

回答

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; 
    } 
} 

然后使用税类代替HashMap中的对象的数组,tax_rates : array

该代码使用谷歌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);