将JSON转换为Object属性列表(Java)

时间:2018-05-04 06:12:06

标签: java json

我有简单的json,看起来像这样:

[  
  {  
    "id":"0",
    "name":"Bob",
    "place":"Colorado",
  },
  {  
    "id":"1",
    "name":"John",
    "place":"Chicago",
  },
  {  
    "id":"2",
    "name":"Marry",
    "place":"Miami",
  }
]

我想要的是使用Java创建包含所有&#39;名称的字符串列表(List<String>)。我有一些使用Gson的经验,我想的是:

Gson gson = new Gson();
String[] stringArray= gson.fromJson(jsonString, " ".class);

这个方法的问题是我应该创建一些POJO类,在这种情况下我没有。如果没有用这个名称创建单独的课程,我能以任何方式实现它吗?财产?

3 个答案:

答案 0 :(得分:0)

使用Jackson进行解析,并使用Java 8 Streams API仅提取名称字段;以下内容可以帮助您:

// Your string
jsonString = "[{ \"id\":\"0\", \"name\":\"Bob\", \"place\":\"Colorado\" }, { \"id\":\"1\", \"name\":\"John\", \"place\":\"Chicago\"}, { \"id\":\"2\", \"name\":\"Marry\", \"place\":\"Miami\" }]";
// using Jackson to parse
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.getTypeFactory();
List<MyInfo> myObjectList = objectMapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, MyInfo.class));

// Java 8 Collections
List<String> nameList = myObjectList.stream().map(MyInfo::getName).collect(Collectors.toList());

请注意,它意味着使用代表您的Java类的MyInfo类,其中Json对象适合您。

答案 1 :(得分:0)

您可以使用JSONArray从键'name'获取值。像这样:

JSONArray jSONArray = new JSONArray(yourJson);
List<String> list = new ArrayList<>();
for (int i = 0; i < jSONArray.length(); i++) {
  JSONObject object = (JSONObject) jSONArray.get(i);
  String value = object.getString("name");
  System.out.println(value);
  list.add(value);
}

答案 2 :(得分:0)

您可以尝试以下代码段,

    import org.json.simple.JSONArray;
    import org.json.simple.JSONObject;
    import org.json.simple.parser.JSONParser;
    import org.json.simple.parser.ParseException;

        List<String> ls = new ArrayList<String>();
        JSONObject jsonObj = new JSONObject();
        JSONArray jsonArr = new JSONArray();
        JSONParser jsonParse = new JSONParser();

        String str =  "[{\"id\": \"0\",\"name\": \"Bob\",\"place\": \"Colorado\"},"
                + "{\"id\": \"1\",\"name\": \"John\",\"place\": \"Chicago\"},"
                + "{\"id\": \"2\",\"name\": \"Marry\",\"place\": \"Miami\"}]";
        try {
            jsonArr= (JSONArray) jsonParse.parse(str); //parsing the JSONArray
            if(jsonArr!=null){
                int arrayLength =jsonArr.size(); //size is 3 here
                for(int i=0;i<arrayLength;i++){
                    jsonObj = (JSONObject) jsonParse.parse(jsonArr.get(i).toString());
                    ls.add(jsonObj.get("name").toString()); //as we need only value of name into the list
                }
                System.out.println(ls);
            }

        } catch (ParseException e) {
            e.printStackTrace();
        }catch(Exception e1){
            e1.printStackTrace();
        }

如果有数组,请使用JSONArray并使用jsonParse来避免任何解析错误。 我已经使用 json-simple API来实现上述目标。