在不知道密钥的情况下从json文件中填充数组

时间:2013-03-03 14:59:02

标签: java simplejson

我有以下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 个答案:

答案 0 :(得分:2)

您可以使用

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

获取密钥的名称。 Javadoc

使用此功能,您可以使用getJSONObject

获取值

循环使用这些可以构建您正在寻找的数组。

答案 1 :(得分:1)

检查此页面上的示例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< - >此lib的Java对象映射:https://code.google.com/p/json-simple/wiki/MappingBetweenJSONAndJavaEntities

答案 2 :(得分:1)

您还可以尝试以下代码:

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;