我有一个填充了一些数组的JSON文件。我想知道是否有人知道如何检查文件中是否存在特定的数组。
编辑:这就是我的文件的组织方式。
{
'Objects':
{
'array1':
[
{
'element1': 'value',
'element1': 'value',
'element1': 'value'
}
],
// more arrays.
}
我想搜索数组并检查是否存在特定的数组。如果它doese然后我会序列化它。 }
提前致谢所有帮助
答案 0 :(得分:4)
以下是您可以使用杰克逊采取的方法示例。它使用最新问题更新中提供的相同JSON结构以及匹配的Java数据结构。只需一行代码就可以轻松实现反序列化。
我选择将JSON数组反序列化为Java List。将其更改为使用Java数组非常容易。
(请注意,我建议更改此JSON结构存在问题,如果它在您的控制中进行更改。)
<强> input.json:强>
{
"objects": {
"array1": [
{
"element1": "value1",
"element2": "value2",
"element3": "value3"
}
],
"array2": [
{
"element1": "value1",
"element2": "value2",
"element3": "value3"
}
],
"array3": [
{
"element1": "value1",
"element2": "value2",
"element3": "value3"
}
]
}
}
Java代码:
import java.io.File;
import java.util.List;
import java.util.Map;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.map.ObjectMapper;
public class Foo
{
public static void main(String[] args) throws Exception
{
ObjectMapper mapper = new ObjectMapper();
// configure Jackson to access non-public fields
mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY));
// deserialize JSON to instance of Thing
Thing thing = mapper.readValue(new File("input.json"), Thing.class);
// look for the target named array2
if (thing.objects.containsKey("array2"))
{
// an element with the target name is present, make sure it's a list/array
if (thing.objects.get("array2") instanceof List)
{
// found it
List<OtherThing> target = thing.objects.get("array2");
OtherThing otherThing = target.get(0);
System.out.println(otherThing.element1); // value1
System.out.println(otherThing.element2); // value2
System.out.println(otherThing.element3); // value3
}
// else do something
}
// else do something
}
}
class Thing
{
Map<String, List<OtherThing>> objects;
}
class OtherThing
{
String element1;
String element2;
String element3;
}
答案 1 :(得分:1)
所以你想用一些JSON数组加载一个文件并搜索那些数组?我建议使用像Jackson这样的好的JSON解析器。
答案 2 :(得分:-1)
您可以使用“value instanceof Array”