Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
映射到Java中的JSON_Java_Json - Fatal编程技术网

映射到Java中的JSON

映射到Java中的JSON,java,json,Java,Json,我有一张这样的地图 地图: 我想把它转换成JSON格式,如下所示 [ {"title": "Item 1"}, {"title": "Folder 2", "children": [ {"title": "Sub-item 2.1"}, {"title": "Sub-item 2.2"} ] }, {"title": "Folder 3", "children": [

我有一张这样的地图 地图:

我想把它转换成JSON格式,如下所示

[

    {"title": "Item 1"},
    {"title": "Folder 2",
        "children": [
            {"title": "Sub-item 2.1"},
            {"title": "Sub-item 2.2"}
        ]
    },
    {"title": "Folder 3",
        "children": [
            {"title": "Sub-item 3.1"},
            {"title": "Sub-item 3.2"}
        ]
    },
    {"title": "Item 5"}
]
我尝试使用GSON,但结果并不是我想要的:

{
  "facility-1": {
     "facility-kind1":
      {"param1":"XPath-1","param2":"XPath-2"},
     "facility-kind2":
      {"param1":"XPath-1","param2":"XPath-2"},
     "facility-kind3":
      {"param1":"XPath-1","param2":"XPath-2"}
  },
  "facility-2": { 
     "facility-kind1":
      {"param1":"XPath-1","param2":"XPath-2"},
     "facility-kind2":
      {"param1":"XPath-1","param2":"XPath-2","param3":"XPath-3"},
     "facility-kind3":
      {"param1":"XPath-1","param2":"XPath-2"}
  }
}

如何将json格式化为我想要的格式???

您想要的是漂亮的打印

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(yourMap);

你想要的是漂亮的印刷品

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(yourMap);

您需要将JSON转换为您提供的新格式

要转换的数据: 使用GSON 创建一些要处理数据的类,它们可以是:

static class Facility {
    List<Kind> children = new LinkedList<Kind>();
}

static class Kind {
    String title;
    Map<String, String> params;

    public Kind(String title, Map<String, String> params) {
        this.title = title;
        this.params = params;
    }
}

使用JSONObject/JSONArray
publicstaticvoidmain(String…args)引发异常{
JSONObject源=新的JSONObject(json);
JSONArray destination=新的JSONArray();
for(迭代器keys=source.keys();keys.hasNext();){
String facilityName=(字符串)键。下一步();
JSONObject种类=source.getJSONObject(facilityName);
JSONArray children=新的JSONArray();
for(迭代器kit=kinds.keys();kit.hasNext();){
字符串种类=(字符串)kit.next();
JSONObject参数=种类。getJSONObject(种类);
JSONObject kindObject=新的JSONObject();
kindObject.put(“标题”,kind);
for(迭代器pit=params.keys();pit.hasNext();){
String param=(String)pit.next();
kindObject.put(param,params.get(param));
}
儿童。放置(实物);
}
JSONObject facility=新的JSONObject();
设施名称(“名称”,设施名称);
设施。放置(“儿童”,儿童);
目的地(设施);
}
System.out.println(destination.toString(2));
}

您需要将JSON转换为您提供的新格式

要转换的数据: 使用GSON 创建一些要处理数据的类,它们可以是:

static class Facility {
    List<Kind> children = new LinkedList<Kind>();
}

static class Kind {
    String title;
    Map<String, String> params;

    public Kind(String title, Map<String, String> params) {
        this.title = title;
        this.params = params;
    }
}

使用JSONObject/JSONArray
publicstaticvoidmain(String…args)引发异常{
JSONObject源=新的JSONObject(json);
JSONArray destination=新的JSONArray();
for(迭代器keys=source.keys();keys.hasNext();){
String facilityName=(字符串)键。下一步();
JSONObject种类=source.getJSONObject(facilityName);
JSONArray children=新的JSONArray();
for(迭代器kit=kinds.keys();kit.hasNext();){
字符串种类=(字符串)kit.next();
JSONObject参数=种类。getJSONObject(种类);
JSONObject kindObject=新的JSONObject();
kindObject.put(“标题”,kind);
for(迭代器pit=params.keys();pit.hasNext();){
String param=(String)pit.next();
kindObject.put(param,params.get(param));
}
儿童。放置(实物);
}
JSONObject facility=新的JSONObject();
设施名称(“名称”,设施名称);
设施。放置(“儿童”,儿童);
目的地(设施);
}
System.out.println(destination.toString(2));
}

你是在问如何包含whiespace吗?我希望子元素在“children:[…]”下,这可能有点离题,但如果你想预打印JSON,可以尝试我不想预打印“我希望子元素在”“children:[…]”下。”然后重新写下你的问题,你会得到很多好的答案。。。没人能猜到!:)你是在问如何包含whiespace吗?我希望孩子们在“children:[…]”下,这可能有点离题,但如果你想预打印JSON,你可以尝试我不想预打印“我希望子元素在”children:[…]”下,然后重新写下你的问题,你会得到很多好的答案。。。没人能猜到!:)我希望孩子们在“children”下:“[…]”我希望孩子们在“children”[…]”下:“{”出口压力油(S_12448/2)”:“prod3653_2/S_12448/2”,“进口压力油(S_12862/2)”:“prodml653_1/S_12862/2”中没有得到内部孩子}您能提供一些完整的示例数据吗?似乎您有某种重复的内部子项定义。不像您在问题中提供的。[{“标题”:“项目1”},{“标题”:“文件夹2”,“isFolder”:true,“键”:“文件夹2”,“子项”:[{“标题”:“子项2.1”,“子项”:[{“标题”:“分项2.1.1”、“参数”:“某物”}、{“标题”:“分项2.2.1”}、{“标题”:“分项2.2”}]}、{“标题”:“文件夹3”、“isFolder”:true、“键”:“文件夹3”、“子项”:[{“标题”:“分项3.1”}、{“标题”:“分项3.2”}、{“标题”:“项目5”}]这就是我想要o/P的方式,但输入是什么?您问题中提供的输入与例如“文件夹”和“键”无关。我没有在“children[“tag”params:{“output pressure Oil(S_12448/2)”:“prod3653_2/S_12448/2”,“input pressure Oil(S_12862/2)”:“prodml653_1/S_12862/2”}您能提供一些完整的示例数据吗?似乎您有某种递归的内部子项定义。不像您在问题中提供的那样。[{“标题”:“项目1”},{“标题”:“文件夹2”,“isFolder”:true,“键”:“文件夹2”,“子项”:[{“标题”:“子项2.1”,”子项:[{“标题”:“分项2.1.1”,“参数”:“某物”},{“标题”:“分项2.2.1”},{“标题”:“分项2.2”}]},{“标题”:“文件夹3”,“isFolder”:true,“键”:“文件夹3”,“子项”:[{“标题”:“分项3.1”},{“标题”:“分项3.2”},{“标题”},},{“标题”},{“:“第5项”}]这就是我想要的o/p但输入是什么?您问题中提供的输入与例如“文件夹”和“键”无关。
Map<String, Map<String, Map<String, String>>>
public static void main(String... args) throws Exception {

    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    Type type = new TypeToken<
            Map<String, Map<String, Map<String, String>>>>() {}.getType();

    Map<String, Map<String, Map<String, String>>> source = 
        gson.fromJson(json, type);

    Map<String, Facility> dest = new HashMap<String, Facility>();

    for (String facilityName : source.keySet()) {
        Map<String, Map<String, String>> facility = source.get(facilityName);

        Facility f = new Facility();

        for (String kindName : facility.keySet())
            f.children.add(new Kind(kindName, facility.get(kindName)));

        dest.put(facilityName, f);
    }

    System.out.println(gson.toJson(dest));
}
public static void main(String... args) throws Exception {

    JSONObject source = new JSONObject(json);
    JSONArray destination = new JSONArray();

    for (Iterator<?> keys = source.keys(); keys.hasNext(); ) {

        String facilityName = (String) keys.next();
        JSONObject kinds = source.getJSONObject(facilityName);

        JSONArray children = new JSONArray();
        for (Iterator<?> kit = kinds.keys(); kit.hasNext(); ) {

            String kind = (String) kit.next();
            JSONObject params = kinds.getJSONObject(kind);

            JSONObject kindObject = new JSONObject();
            kindObject.put("title", kind);

            for (Iterator<?> pit = params.keys(); pit.hasNext(); ) {
                String param = (String) pit.next();
                kindObject.put(param, params.get(param));
            }
            children.put(kindObject);
        }

        JSONObject facility = new JSONObject();
        facility.put("title", facilityName);
        facility.put("children", children);
        destination.put(facility);
    }
    System.out.println(destination.toString(2));
}