递归解析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里面,当然你也可以用其他对象类型接受你的返回值。贴出来欢迎大家指正

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值