在Java中将JSON字符串拆分为多个JSON字符串

在Java中将JSON字符串拆分为多个JSON字符串,java,json,Java,Json,我有一个类似于下面的JSON结构: { “MyApp”:“2.0”, “信息”:{ “版本”:“1.0.0” }, “路径”:{ “MyPath1”:{ “键”:“值” }, “MyPath2”:{ “键”:“值” } } } 在路径中可能有数量可变的MyPath键。我想将此结构分解为如下内容: JSON 1: { “MyApp”:“2.0”, “信息”:{ “版本”:“1.0.0” }, “路径”:{ “MyPath1”:{ “键”:“值” } } } JSON 2: { “MyA

我有一个类似于下面的JSON结构:

{
“MyApp”:“2.0”,
“信息”:{
“版本”:“1.0.0”
},
“路径”:{
“MyPath1”:{
“键”:“值”
},
“MyPath2”:{
“键”:“值”
}
}
}
路径中
可能有数量可变的
MyPath
键。我想将此结构分解为如下内容:

  • JSON 1:
{
“MyApp”:“2.0”,
“信息”:{
“版本”:“1.0.0”
},
“路径”:{
“MyPath1”:{
“键”:“值”
}
}
}
  • JSON 2:
{
“MyApp”:“2.0”,
“信息”:{
“版本”:“1.0.0”
},
“路径”:{
“MyPath2”:{
“键”:“值”
}
}
}

在Java中有什么简单的方法可以选择吗?

尝试以下几行内容..不是完美的,而是一个开始

  • 将Json转换为Java对象。您可能需要一个java类或Pojo来映射到它(除非您已经有了一个)。 Var-MyApp; var列表

  • 将Java对象转换回所需格式的Json对象。阅读每一项

    • 始终添加MyApp 迭代列表 添加到JSONObject集合
  • 返回所有对象并根据需要使用它们
  • 编辑(只是注意到Java需要它,我的错) --也许有更简单的方法,但这是我得到的解决方案。 导入JSON并将其保存到2个变量时,其中一个变量将用于创建新对象。 为所有新对象创建newArr。 我正在遍历所有路径并创建newPath,它保存在newObjectsArray中,然后推送到newArr。 然后可以通过该数组访问所有对象。 若你们有多个myApps,你们可以每个赚$1,这将获取上层数据并创建新的json,只需在其中循环移动即可

    jsFiddle:

    var-arr={
    “MyApp”:“2.0”,
    “信息”:{
    “版本”:“1.0.0”
    },
    “路径”:{
    “MyPath1”:{
    “键”:“值1”
    },
    “MyPath2”:{
    “键”:“值2”
    }
    }
    }
    var newObjectArray={
    “MyApp”:“2.0”,
    “信息”:{
    “版本”:“1.0.0”
    },
    “路径”:{
    “MyPath1”:{
    “键”:“值1”
    },
    “MyPath2”:{
    “键”:“值2”
    }
    }
    }
    var newArr={'Data':[]}
    var length=Object.key(arr.path).length;
    变量i=0
    while(i
    使用流行的Java JSON解析器Jackson,您可以实现以下功能:

    String json=“{\'MyApp\':\'2.0\',\'info\':{\'version\':\'1.0.0\',\'paths\':”
    +“{\'MyPath1\':{\'Key\':\'Value\'},\'MyPath2\':{\'Key\':\'Value\'}}”;
    //创建一个ObjectMapper实例来操作JSON
    ObjectMapper mapper=新的ObjectMapper();
    enable(SerializationFeature.INDENT_输出);
    //创建一个列表以存储结果(该列表将存储Jackson树模型对象)
    列表结果=新建ArrayList();
    //将JSON读入Jackson树模型并获取“路径”节点
    JsonNode tree=mapper.readTree(json);
    JsonNode path=tree.get(“路径”);
    //迭代“路径”节点下的字段名
    迭代器fieldNames=path.fieldNames();
    while(fieldNames.hasNext()){
    //获取“路径”节点的子节点
    字符串fieldName=fieldNames.next();
    JsonNode path=path.get(fieldName);
    //创建树的副本
    JsonNode copyOfTree=mapper.valueToTree(树);
    //从“路径”节点删除所有子节点;向“路径”添加单个子节点
    ((ObjectNode)copyOfTree.get(“路径”)).removeAll().set(fieldName,path);
    //将修改后的树添加到结果列表中
    结果。添加(复制树);
    }
    //打印结果
    for(JsonNode:result){
    System.out.println(mapper.writeValueAsString(节点));
    System.out.println();
    }
    
    输出为:

    {
    “MyApp”:“2.0”,
    “信息”:{
    “版本”:“1.0.0”
    },
    “路径”:{
    “MyPath1”:{
    “键”:“值”
    }
    }
    }
    {
    “MyApp”:“2.0”,
    “信息”:{
    “版本”:“1.0.0”
    },
    “路径”:{
    “MyPath2”:{
    “键”:“值”
    }
    }
    }
    

    将为
    路径
    节点的每个子节点创建一个新的JSON。

    您可以删除JSON对象的一部分,如delete arr.paths.MyPath2;因此,将json添加到两个var中,从第一个删除第一个mypath,从第二个删除第二个mypath。如果我没有错的话这就是你需要的答案。。好主意,但问题是我不知道我的
    路径中会有多少
    Mypath
    。我想的是将JSON保存在一个
    JSONObject
    中,并从JSON中删除
    path
    键,将其存储在一个单独的
    JSONObject
    中,然后迭代第二个对象并添加
    Mypath
    到第1个json。但问题是我的
    JSONObject
    无法识别
    MyPath1
    2
    以及第二个json中的键集值。。希望我没有把你弄糊涂;)哦,我明白了,我在json上做了很多工作,我不知道里面有什么,有多少对象要来,你可以检查我回答的这个问题,它从json()自动生成html,你应该只检查路径的长度,然后对它执行while循环,并生成新的json对象,它会删除每个myPath(检查索引并使用object.keys获取objName)这将具有拆分路径。如果您无法做到这一点,我将在工作后尝试制作JSFIDLE:)我理解OP希望用Java实现它。我刚刚注意到了这一点,我给了他一些逻辑:)谢谢。如果我想探索更多的功能
          var arr = {
     "MyApp":"2.0",
       "info":{  
          "version":"1.0.0"
       },
       "paths":{  
          "MyPath1":{
          "Key":"Value1"
          },
          "MyPath2":{
          "Key":"Value2"
          }
    }
    }
    
    var newObjectArray = {
     "MyApp":"2.0",
       "info":{  
          "version":"1.0.0"
       },
       "paths":{  
          "MyPath1":{
          "Key":"Value1"
          },
          "MyPath2":{
          "Key":"Value2"
          }
    }
    }
    
    var newArr = {'Data':[]}  
    var length = Object.keys(arr.paths).length; 
    var i = 0
    
    
    while(i < length){
     newObjectArray.paths = {} 
      var objectKey = Object.keys(arr.paths)[i] // MyPath1, MyPath2...
      var objectValues = JSON.stringify(arr.paths[objectKey]) // {"Key":"Value1"} 
      var newPath = '{'+ objectKey + ':' +  objectValues+'}'
    
      newObjectArray.paths = newPath 
      newArr.Data.push(newObjectArray)
    
    
      i++
    }
    
    
    var countObjects = newArr.Data.length
    alert(countObjects)
    alert(JSON.stringify(newArr.Data[0])) // access your objects like this