You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java解析简单JSON字符串提取键值对存入内存表问题排查

问题背景

需要从简单JSON字符串中提取键值对存入内存表格,待解析的JSON字符串如下:

{"nom":"BRUN","prenom":"Albert","date_naiss":"10-10-1960","adr_email":"abrun@gmail.com","titre":"Mr","sexe":"F"}

原有实现无法正确遍历键值对,问题代码如下:

public static ArrayHandler jsonSimpleObjectToTab(String data) throws ParseException {
        if( data instanceof String) {
        final var jsonParser = new JSONParser();
        final var object = jsonParser.parse(data);
        final var array = new JSONArray();
        array.put(object);
        final var handler = new ArrayHandler("BW_funct_Struct");
        for( KeyValuePair element : array) {
            handler.addCell(element);
            Log.warn(handler);
        }
        return handler;
        } else {
            throw new IllegalArgumentException("jsonSimpleObjectToTab: do not support complex object" + data + "to Tab");
        }
    }
问题根因
  • 解析得到的object是JSONObject类型,本身存储了JSON的所有键值对。你将整个对象作为单个元素放入JSONArray,遍历时只会拿到这一个完整对象,无法获取内部的键值对。
  • 方法入参已经声明为String类型,额外做instanceof判断属于冗余逻辑。
修复方案

不需要额外包装JSONArray,直接遍历JSONObject内部的键值对即可,修复后代码:

public static ArrayHandler jsonSimpleObjectToTab(String data) throws ParseException {
    if (data == null || data.isBlank()) {
        throw new IllegalArgumentException("Input json string cannot be empty");
    }
    final JSONParser jsonParser = new JSONParser();
    final JSONObject jsonObj = (JSONObject) jsonParser.parse(data);
    final ArrayHandler handler = new ArrayHandler("BW_funct_Struct");
    // 直接遍历JSON对象的所有键值对
    for (Map.Entry<String, Object> entry : jsonObj.entrySet()) {
        KeyValuePair element = new KeyValuePair(entry.getKey(), entry.getValue());
        handler.addCell(element);
        Log.warn("Added key-value pair: key={}, value={}", entry.getKey(), entry.getValue());
    }
    return handler;
}
补充说明
  • 如果你使用的是json-simple类库,JSONObject本身继承自HashMap,直接遍历entrySet()即可拿到所有键和对应的值。
  • 如果后续需要处理最外层为数组的JSON([]包裹的多对象结构),再判断解析结果为JSONArray类型后遍历数组元素即可,当前单对象场景不需要构造数组。

内容的提问来源于stack exchange,提问作者IphoneVore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 01:01:25