JSON - Проверить, существует ли массив - PullRequest
4 голосов
/ 12 июля 2011

У меня есть файл JSON, заполненный некоторыми массивами. Мне было интересно, если кто-нибудь знает, как я могу проверить, существует ли массив спецификаций в файле.

РЕДАКТИРОВАТЬ: Это, как мой файл организован.

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

Я хочу поискать в массивах и проверить, существует массив спецификов или нет. Если это будет, то я буду сериализовать это. }

Заранее спасибо за помощь

Ответы [ 3 ]

4 голосов
/ 13 июля 2011

Ниже приведен пример подхода, который вы могли бы использовать, используя Джексона. Он использует ту же структуру JSON, которая представлена ​​в последних обновлениях вопросов, а также соответствующую структуру данных Java. Это позволяет очень легко десериализовать, используя всего одну строку кода.

Я решил просто десериализовать массив JSON в список Java. Это очень легко изменить, чтобы использовать вместо этого массив 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 голос
/ 12 июля 2011

Итак, вы хотите загрузить файл с некоторыми массивами JSON и найти в этих массивах что-нибудь?Я бы порекомендовал использовать хороший анализатор JSON, например Джексон .

0 голосов
/ 12 июля 2011

Вы можете использовать «значение instanceof Array»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...