Заполнить массив из файла JSON, не зная ключей

У меня есть следующий файл Json, и я хочу создать список массивов, я не знаю имени ключей (например, персона, фамилия и т. Д.), Это может быть много сущностей, таких как нанимает пользователей и т. Д., Но структура файла должна быть точно такой же,Как мне это сделать?

файл

{
    "Person": [
        {
            "name": "Peter",
            "lastname": "ta",
            "age": 43,
            "sex": "male"
        },
        {
            "name": "Zara",
            "lastname": "treg",
            "age": 25,
            "sex": "female"
        }
    ]
}

что мне нужно, это создать список массивов, как это

person ,name,peter ,lastname,ta,age,43,sex,male
person ,name,zara ,lastname,treg,age,23,sex,female

....

Я начал со следующего кода, чтобы получить файл, но так как я не знаю названия ключей, я не знаю, как действовать дальше.

JSONObject jsonObject= (JSONObject) parser.parse(new FileReader("C:\\General\\jsonperson.txt"));

3 ответа

Решение

Проверьте пример 4 на этой странице: https://code.google.com/p/json-simple/wiki/DecodingExamples

В частности, эта часть:

Map json = (Map)parser.parse(jsonText, containerFactory);
Iterator iter = json.entrySet().iterator();
System.out.println("==iterate result==");
while(iter.hasNext()){
  Map.Entry entry = (Map.Entry)iter.next();
  System.out.println(entry.getKey() + "=>" + entry.getValue());
}

System.out.println("==toJSONString()==");
System.out.println(JSONValue.toJSONString(json));

Вот как вы можете перебирать записи JSONObject, Кстати, с этой библиотекой, если я думаю, что вы ее используете, JSONObject это просто java.util.Map, и вы можете использовать все его методы - вот почему он работает для этого примера, чтобы привести результат анализа к Map,

Все сопоставления объектов JSON <-> Java для этой библиотеки: https://code.google.com/p/json-simple/wiki/MappingBetweenJSONAndJavaEntities

Ты можешь использовать

String[] keyNames= JSONObject.getNames(jsonObject);

чтобы получить имена ключей. Javadoc

Используя это, вы можете получить значения с помощью getJSONObject

Зацикливая их, вы можете создать массив, который вы ищете.

Вы также можете попробовать следующий код:

public void performExecute() throws IOException {        
        JsonFactory jsonFactory = new JsonFactory(); 
        ObjectMapper objectMapper = new ObjectMapper(jsonFactory); 
        File file = new File("json.txt"); 
        TypeReference<HashMap<String, Object>> typeReference = new TypeReference<HashMap<String, Object>>() {}; 
        HashMap<String, Object> jsonMap = objectMapper.readValue(file, typeReference); 
        System.out.println("JSON DATA: " + jsonMap); 
    } 

Убедитесь, что библиотека Джексона находится в вашем пути к классам и вы импортируете следующие классы, используя код:

import java.io.File;
import java.io.IOException;
import java.util.HashMap;

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
Другие вопросы по тегам