在Java中将JSON字符串拆分为多个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
{
“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中有什么简单的方法可以选择吗?尝试以下几行内容..不是完美的,而是一个开始
- 始终添加MyApp 迭代列表 添加到JSONObject集合
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