JSON - 检查数组是否存在

时间:2011-07-12 19:02:27

标签: java json

我有一个填充了一些数组的JSON文件。我想知道是否有人知道如何检查文件中是否存在特定的数组。

编辑:这就是我的文件的组织方式。

           {
                   'Objects':
                    {
                             'array1':
                              [
                                         {
                                         'element1': 'value',
                                         'element1': 'value',                                                   
                                         'element1': 'value'
                                         }
                             ],
                             // more arrays. 
                   }

我想搜索数组并检查是否存在特定的数组。如果它doese然后我会序列化它。                }

提前致谢所有帮助

3 个答案:

答案 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”