最近补充需求需要对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里面,当然你也可以用其他对象类型接受你的返回值。贴出来欢迎大家指正