对象转JSON |
String json = JSON.toJSONString(object);
JSON转对象 |
首先你需要构造一个对象实体类,且还需要携带一个无参构造器,比如:
@Data
public class User implements Serializable{
public User(){}
private String username;
private String password;
}
然后将JSON处理为对象:
String json = "{\"username\":\"user\",\"password\":\"456\"}";
User user = JSON.parseObject(json,User.class);
System.out.println(user.getUsername()+" : "+user.getPassword());
JSON转list |
List<User> list = JSON.parseArray(json,User.class);
list转JSON |
List<Object> list = JSONArray.parseArray(JSON.toJSONString(list));
在复杂JSON中获取指定key的value |
{"result":{"msg":"","data":{"a":1,"b":2,"key":{...}..}}}
对于上面这个JSON
JSONObject jobj = JSON.parseObject(json);//封装成一个JSON对象
String value = jobj.get("result");//获取result对应的value
JSONObject msg = (JSONObject) jsonObject.get("result");
JSONObject data = (JSONObject) msg.get("data");
String dataValue = JSON.toJSONString(data); //获取data对应的value
上面就是展示示例,一级一级构造JSONObject对象,就可以获取对应的value。
在结合上面的互相转化,就可以流畅使用fastjson了
对于key和value的获取,刚刚有写了一个通用的方法,因为key对应的value可以是一个Object,也可以是一个Array。对于通用的获取代码如下:
public String getColumns(String json, String...cols){
int len = cols.length;
String[][] keyWord = new String[len][];
for (int i = 0; i < len; i++) {
keyWord[i] = cols[i].split("\\.");
}
StringBuffer colVal = new StringBuffer();
for (int i = 0; i < len; i++) {
JSONObject jsonObject = JSON.parseObject(json);
for (int j = 0; j < keyWord[i].length - 1; j++) {
jsonObject = (JSONObject) jsonObject.get(keyWord[i][j]);
}
if (colVal.toString().length() < 1) {
colVal.append(jsonObject.get(keyWord[i][keyWord[i].length - 1]).toString());
} else {
colVal.append("," + jsonObject.get(keyWord[i][keyWord[i].length - 1]).toString());
}
jsonObject = null;
}
return colVal.toString();
}
上面是一个根据key的路径获取value,,且value是一个Object。
cols参数说明:每个col结构需要像 “ result.data.auth ”这样的类似结构就能获取到anth对应的值了。
对于获取JSONArray的value
/**
* {
* "result":{ "msg":"",
* "list":[
* {"user":"123","pass":"111"}
* {"user":"456","pass":"222"}
* ]
* }
* }
*
* 对于上面的json,,arrayPath为“result.list”,cols可以为user,pass
* 最终返回的是user对应的值,或pass的值,cols对应的值
*
* @param json
* @param arrayPath JSONArray的路径
* @param cols JSONArray中对象的一些成员
* @return JSONArray中对象的一些成员的value值
*/
public String getColumns(String json, String arrayPath, String... cols) {
int len = cols.length;
String[] keyWord = arrayPath.split("\\.");
StringBuffer colVals = new StringBuffer();
JSONObject jsonObject = JSON.parseObject(json);
JSONArray jsonArray = null;
for (int i = 0; i < keyWord.length - 1; i++) {
jsonObject = (JSONObject) jsonObject.get(keyWord[i]);
}
jsonArray = (JSONArray) jsonObject.getJSONArray(keyWord[keyWord.length - 1]);//得到对应的JSONArray对象
for (int j = 0; j < jsonArray.size(); j++) {
JSONObject jj = JSON.parseObject(jsonArray.get(j).toString());
for (int i = 0; i < cols.length; i++) {
if (0 == i)
colVals.append(jj.get(cols[i]).toString());
else
colVals.append("," + jj.get(cols[i]).toString());
}
}
return colVals.toString();
}
对于多个值的获取,按照上面两个通用工具取调用就可以完成