遞迴解析json物件(獲取某個key對應的value)
最近補充需求需要對json格式的資料進行處理,在網上搜尋了一些前輩們的心血,感覺不合適,就自己寫了一個,
廢話不說,直接上程式碼:
package mlstudy.json;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import com.alibaba.fastjson.JSONObject;
public class JSONUtil {
// private static Object object = null;
public static String readProperty(){
Properties pro = new Properties();
FileInputStream in;
try {
in = new FileInputStream("D:/workspace_git/mlstudy/target/test-classes/config/json.properties");
pro.load(in);
String jsonString = pro.getProperty("json");
JSONObject json = JSONObject.parseObject(jsonString);
// new Thread(
// new Runnable(){
// @Override
// public void run() {
//
// getKey(json,"express_company");
// System.out.println("settlement_id:"+object);
// }
//
// }
//
// )
// .start();
//
// new Thread(
// new Runnable(){
// @Override
// public void run() {
//
// getKey(json,"express_company");
// System.out.println("express_company:"+object);
// }
//
// }
//
// )
// .start();
//
// new Thread(
// new Runnable(){
// @Override
// public void run() {
// getKey(json,"express_company");
// System.out.println("receipt_money:"+object);
// }
//
// }
//
// )
// .start();
Map<Object,Object> result = new HashMap<>();
getKey(json,"express_company",result);
System.out.println("receipt_money:"+result);
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static Object getKey(JSONObject json,String filterKey,Map<Object,Object> result){
Set<String> jsonSet = json.keySet();
Iterator<String> keys = jsonSet.iterator();
while (keys.hasNext()){
String key=keys.next();
Object obj = json.get(key);
if (obj instanceof JSONObject){
if (key.equals(filterKey)){
result.put("result", obj);
}
getKey((JSONObject)obj,filterKey,result);
}else{
if (key.equals(filterKey)){
result.put("result", obj);
}
}
}
return result;
}
public static void main(String[] args) {
readProperty();
}
}
json測試資料放在了檔案裡,因為拼寫太麻煩,就讀取了出來
因為遞迴直接返回資料是不行的,需要一層層返回,首先考慮用全域性靜態變數,功能可以實現,但是有執行緒安全問題!!!
所以,通過傳參將結果集封裝在map裡面,當然你也可以用其他物件型別接受你的返回值。貼出來歡迎大家指正