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

存在映射时JSONObject.get(key)返回null问题排查

我之前也碰到过一模一样的坑!明明控制台输出的JSON里清清楚楚有"partner":"website",但调用get("partner")却返回null,这种情况多半不是代码逻辑的问题,而是下面几个容易忽略的细节导致的,给你逐个排查:

1. 编码问题(最常见的元凶)

你用FileReader读取文件的话,它会默认用系统的默认编码来解码文件,但如果你的JSON文件是UTF-8编码(尤其是带BOM的UTF-8),而系统默认编码是GBK之类的,就会导致解析出来的键被悄悄加上了隐形的乱码字符(比如开头的BOM标记\uFEFF)。表面上toJSONString()输出的是"partner",但实际键是"\uFEFFpartner",自然用普通的"partner"查不到值。

解决办法:换用InputStreamReader指定UTF-8编码读取,彻底规避编码差异:

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

public class JsonTest {
    public static void main(String[] args) throws Exception {
        String path = "SomePathHere";
        JSONParser parser = new JSONParser();
        // 明确指定UTF-8编码读取文件
        JSONObject json = (JSONObject) parser.parse(
            new InputStreamReader(new FileInputStream(path), StandardCharsets.UTF_8)
        );
        System.out.println("JSONObject: " + json.toJSONString());
        String partner = (String) json.get("partner");
        System.out.println(partner); // 这下应该能输出"website"了
    }
}

2. 导包冲突搞的鬼

如果你的项目里同时引入了多个JSON库(比如org.json、json-lib和json-simple),很可能不小心导入了错误的JSONObject类——比如你以为用的是org.json.simple.JSONObject,但实际导入的是其他库的JSONObject,它们的get方法逻辑可能不一样,导致取不到值。

解决办法:

  • 检查你的import语句,确保是import org.json.simple.JSONObject;和import org.json.simple.parser.JSONParser;;
  • 如果实在分不清,直接用全限定类名来声明变量,避免混淆:
org.json.simple.JSONObject json = (org.json.simple.JSONObject) parser.parse(new FileReader(path));

3. JSON键里藏了隐形字符

有时候JSON文件里的键看起来是"partner",但实际带有空格、全角空格或者其他Unicode隐形字符(比如" partner"或者"partner "),肉眼根本看不出来,但get方法是严格匹配字符串的,自然返回null。

解决办法:

  • 用文本编辑器的“显示所有字符”功能(比如Notepad++的「视图→显示符号→显示所有字符」)打开JSON文件,检查键是否有多余的字符;
  • 或者在代码里遍历所有键,打印出实际的键内容和长度:
for (Object key : json.keySet()) {
    String keyStr = (String) key;
    System.out.println("实际键值: '" + keyStr + "' | 字符长度: " + keyStr.length());
}

如果输出的长度不是7("partner"刚好7个字符),就说明键里有隐形字符,修正JSON文件即可。

4. 旧版本json-simple的bug

如果以上都没问题,那可能是你用的json-simple版本太旧,存在解析bug。比如早期版本处理某些特殊格式的JSON时会出现异常情况。

解决办法:
更新到最新的稳定版(目前是1.1.1),如果用Maven的话,在pom.xml里配置:

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:08:40