获取json类型长字符串中的层级数据
1.json类型字符串若想获取下级数据的话,可以通过以下代码实现:
String response = "{\n" +
"\"Name\":\"yudoudou\",\n" +
"\"age\":20,\n" +
"\"flag\":false,\n" +
"\"live\":\"上海浦东新区\",\n" +
"\"mobile\":\"1008610010\"\n" +
"}";
System.out.println("response = " + response); //输出长json
//将字符串转换为JSON对象
JSONObject jsonObject = JSONObject.parseObject(response);
String name = jsonObject.get("Name").toString();
System.out.println("name = " + name); //获取json中的名字
输出结果
2.若字符串是一个多层级的JSON时,可以通过指定字符循环截取的方法,将截取出来的字符串到Map里,再通过get获取,如下:
public static void main(String[] args) {
String response = "{\n" +
"\"data\":{\n" +
"\"Name\":\"yudoudou\",\n" +
"\"age\":20,\n" +
"\"flag\":false,\n" +
"\"live\":\"上海浦东新区\",\n" +
"\"mobile\":\"1008610010\"\n" +
"}\n" +
"}";
System.out.println("response = " + response); //输出长json
//创建map对象
Map<String, Object> objectMap = new HashMap<>();
//将字符串转换为JSON对象
JSONObject jsonObject = JSONObject.parseObject(response);
//调用方法,将转换的对象和map对象作为参数
flattenJson("", jsonObject, objectMap);
String name = objectMap.get("data-Name").toString();
String mobile = objectMap.get("data-mobile").toString();
System.out.println("name = " + name); //获取json中的名字
System.out.println("mobile = " + mobile); //获取json中的手机号
}
/**
* 循环截取层级数据的方法,用 "-" 来区分层级
* @param prefix
* @param obj
* @param linkedHashMap
*/
private static flattenJson(String prefix, JSONObject obj, Map<String, Object> linkedHashMap) {
for (String key : obj.keySet()) {
Object value = obj.get(key);
if (value instanceof JSONObject) {
if (!linkedHashMap.containsKey(key)) {
linkedHashMap.put(key, value);
}
flattenJson(prefix + key + "-", (JSONObject) value, linkedHashMap);
} else {
linkedHashMap.put(prefix + key, value);
}
}
}
输出结果
3.同时可以通过以下代码实现Object对象转JSONObject类型:
List<ObjectDTO> resultList = new ArrayList<ObjectDTO>();
ObjectDTO actModelDTO = resultList.get(0);
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(actModelDTO);