FastJson的使用——複雜的JSON獲取指定的key-value,JSON與list,object的互轉
阿新 • • 發佈:2019-02-05
物件轉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();
}
對於多個值的獲取,按照上面兩個通用工具取呼叫就可以完成