2016-06-24 39 views
0

我的程序必须输出以下JSON格式:Java集合到JSON

{ "success": { 
     "code": 1, 
     "desc": "success" }, 
     "response": { 
     "res1": [ 
      { 
      "Item": "item1", 
      "Description": [ 
       { 
       "desc": "ad1", 
       "active": true, 
       "details": [ 
        { 
        "Type": "Type1", 
        "Count": 2, 
        "Status": true 
        }, 
        { 
        "Type": "TYpe2", 
        "Count": 3, 
        "Status": false 
        }, 
        ] 
       }, 
       { 
       "desc": "item2", 
       "active": true, 
       "details": [ 
        { 
        "Type": "Type1", 
        "Count": 4, 
        "Active": true 
        } 
       ] 
       }, 
       { 
      "Item": "item2", 
      "Description": [ 
       { 
       "desc": "d2", 
       "Active": true, 
       "details": [ 
        { 
        "Type": "Type3", 
        "Count": 6, 
        "Active": true 
        }, 
       ] 
       }, 
      ] 
      } 
     ] 
    } 
} 

我已经写了以下内容来创建这个JSON格式

HashMap<String, HashMap<String, String>> m1 = new HashMap<String, HashMap<String, String>>(); 
HashMap<String, String> m2 = new HashMap<String, String>(); 
HashMap<String, ArrayList<HashMap<String, String>>> m3 = new HashMap<String, ArrayList<HashMap<String, String>>>(); 

对于创建mentined JSON格式,我试图把m3和m2,单位为m1。但由于这些不是同一类型,所以不允许放置。

我正在使用GSON将集合转换为JSON。

Gson gson = new Gson(); 
String json1 = gson.toJson(m1); 

我的问题是:对于创建JSON格式,哪些集合在Java中我必须使用?

+0

我会使用[JsonBuilder](https://json-processing-spec.java.net/nonav/releases/1.0/edr/javadocs/javax/json/JsonBuilder.html) – Daniel

+0

你可以使用[org。 json](http://www.tutorialspoint.com/json/json_java_example.htm) – Sampada

+0

我正在使用GSON转换为JSON。我对我必须用来创建JSON格式的集合感到困惑。 – Futuregeek

回答

2

处理这种复杂的JSON结构的最好方法是创建一个具有相同结构的类,其中的属性将底层数组表示为列表。然后,您可以使用gson以直接方式将对象转换为JSON。

换句话说,不是试图将结构合并到复杂集合或现有Java类的组合中,而是创建一个类,以精确表示数据,填充它,然后将其转换为JSON。

+0

谢谢。你能否给我一个示例代码。由于我是Java新手,示例代码将帮助我理解。 – Futuregeek

+0

很难从给定的JSON中解读出你的数据结构是什么。每个顶级字段都可以用适当的类型(String,Integer等)表示,复杂类型的数组可以用您创建为内部类的类型列表来表示。 – stepanian

0

我的建议是复制JSON示例中相同的字段层次结构。

通过Google Gson库,您可以将Java对象(在两行代码中)转换为JSON对象。请检查以下example(来自相关项目的user guide)。

class BagOfPrimitives { 
    private int value1 = 1; 
    private String value2 = "abc"; 
    private transient int value3 = 3; 
    BagOfPrimitives() { 
    // no-args constructor 
    } 
} 

// Serialization 
BagOfPrimitives obj = new BagOfPrimitives(); 
Gson gson = new Gson(); 
String json = gson.toJson(obj); 

// ==> json is {"value1":1,"value2":"abc"} 
1

创建ResponseWrapper类并相应地构建您的json。

示例代码:

public class ResponseWrapper<T>{ 
    private Map<String, T> wrappedObjects = new HashMap<String, T>(); 

    public ResponseWrapper() { 
    } 

    public ResponseWrapper(String name, T wrappedObject) { 
     this.wrappedObjects.put(name, wrappedObject); 
    } 
.. 
.. 

您的JSON可以建这样的:

ResponseWrapper response = new ResponseWrapper<ResponseWrapper>(); 

     Items[] item = .... 
     //item can itself have Description, etc. 
     response.set("res1", (ArrayList) items); 
1

感谢记事本+ +和JSON视图插件,我可以在适当的格式阅读您的JSON数据。 (虽然你的数据缺少一些括号)

在我的辩论中,json结构可以转换成Map,但我个人不太喜欢这个想法。 另一种方法是使用Java POJO来定义您的JSON对象,然后将其转换为json。 Excellent example here

好的。我们将检查您的数据并为其创建Java POJO。这很简单,应该是这样的

public class YourJsonObj { 
    public SuccessObj success; 
    public ResponseObj response; 
} 

其中SuccessObj和ResponseObj是另一种结构类是这样的:

public class SuccessObj { 
    public Integer code; 
    public String desc; 
} 

public class ResponseObj { 
    public List<ResObj> res1; 
} 

另一个子类表现为:ResObj。所有你需要做的就是继续把它定义:

public class ResObj { 
    public String Item; // << this property's name does't make java happy 
    public List<DescriptionObj> Description // << this property's name does't make java happy 
} 

继续这样做,直到定义数据的结束。你明白了。