Java:在 Json 字符串中按 key 取值

本文介绍了一种从庞大的JSON字符串中提取特定数据的方法,并通过示例代码展示了如何使用Java来解析这些数据,以实现高效的搜索和数据展示功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目业务需求:根据搜索框的文本,模糊匹配对应的数据集


写在前:

一:由于数据是花钱调用别人的接口,为了避免因修改数据格式报错,而导致重复消费。所以没对该接口做任何修改,先按部就班拿到数据再说。导致每一个体的对应数据都挤在一个 json 字符串中(每一个体对应的字符串都是 40+kb,个体量为五位数);

二:数据入库时,相关负责人并没有进行数据拆分,数据表就 id、对象名、数据字符串,三个字段(强烈吐槽);

三:正确的解决方法,应该是将该数据合理分表,方便以后的存取。但现在时间比较紧,所以先就这样处理吧(为了其中个别子段,去获取 40+kb 的数据…)。


处理思路:

本想用 mysql 中的 json 相关函数处理,毕竟能在数据库中处理最好。但项目用到的 mysql,版本问题,不支持。

那就将数据拿到后台再处理吧。

为了数据提取速度,加条件、加索引,总算不是太慢了。


代码1:

@Test
public void 测试(){
    System.out.println("### begin");

    Map map = new HashMap<>();
    map.put("name", "搜索框的文本");
    map.put("pageSize", 10);
    map.put("pageIndex", 0);
    List<Map> source = xxxService.xxx(map);

    String jsonString = null;
    Map m2 = new HashMap<>();
    for (Map m: source){
        jsonString= m.get("json字符串").toString();
        m.remove("json字符串");// 只获取需要的数据,其余的舍弃

        m2 = JsonPluginsUtil.jsonToMap(jsonString);
        jsonString= m2.get("需要的list<Map>").toString();
        JSONArray jsonArray = JSONArray.fromObject(jsonString);
        List<Map> list = (List)jsonArray;
        m2 = list.get(0);

//      m.put("字段1", m2.get("字段1"));// 字段1
//      m.put("字段2", m2.get("字段2"));// 字段2
//      m.put("字段3", m2.get("字段3"));// 字段3

        System.out.println("++++++++++++++++++++++++");
        System.out.println("对象名:"+m2.get("对象名"));
        System.out.println("字段1:"+m2.get("字段1"));
        System.out.println("字段2:"+m2.get("字段2"));
        System.out.println("字段3:"+m2.get("字段3"));
    }

    System.out.println("### end");
}

为了先实现功能,写的比较粗糙。


代码2:

@Test
    public void 测试(){
        System.out.println("### begin");

        Map map = new HashMap<>();
        map.put("name", "搜索框的文本");
        map.put("pageSize", 10);
        map.put("pageIndex", 0);
        List<Map> source = xxxService.xxx(map);

        String jsonString = null;
        JSONObject jsonObject = new JSONObject();
        for (Map m: source){
            System.out.println("++++++++++++++++++++++++");

            jsonString = m.get("json字符串").toString();
            m.remove("json字符串");// 只获取需要的数据,其余的舍弃

            jsonObject = JSONObject.fromObject(jsonString );
            jsonString = jsonObject.getString("需要的list<Map>");
            jsonString = jsonString .substring(1, jsonString .length()-1);// 去掉首尾的中括号 []
            jsonObject = JSONObject.fromObject(jsonString );

            System.out.println("对象名:"+jsonObject.getString("对象名"));
            System.out.println("字段1:"+jsonObject.getString("字段1"));
            System.out.println("字段2:"+jsonObject.getString("字段2"));
            System.out.println("字段3:"+jsonObject.getString("字段3"));
        }

        System.out.println("### end");
    }

待续 ……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值