【问题标题】:Parsing JSON that contains other language characters in UTF-8 Encoding以 UTF-8 编码解析包含其他语言字符的 JSON
【发布时间】:2019-03-26 19:31:26
【问题描述】:

我有以下包含特殊字符的 JSON:

{
  "Laptopà":"Dell"
}

当我尝试在 Eclipse IDE 中使用 UTF-8 字符编码解析这个时,我得到一个 JSONException 声明 未找到 JSONObject。下面是我用来解析的代码sn-p,

import org.json.JSONObject;

JSONObject jsonObj = new JSONObject(json);
jsonObj.getString("Laptopà");

这给出了以下例外:

org.json.JSONException: JSONObject["Laptop(Junk Character instead of à)"] not found

我找了好久,一无所获。期待您的帮助来解决这个问题。

【问题讨论】:

  • 请编辑您的问题以包含完整的堆栈跟踪。还请告诉我们您使用的是哪个 JSON 库。
  • 我用过20171018版本的json jar,异常跟踪不多,这是异常org.json.JSONException: JSONObject["Laptop(Junk Character instead of à)"] not found .一些垃圾字符显示而不是严重字符。
  • @karthikeyan 这是重要信息,需要成为您问题的一部分。每当您提出涉及异常的 Java 问题时,请始终在问题中包含异常的完整堆栈跟踪。
  • json 是字符串吗?您是从一些外部来源阅读的,还是您实际上在源代码中编写了文字 JSON 内容?你怎么知道你将它解析为 UTF-8?我在您提供的代码中没有看到任何指定 UTF-8 的代码。
  • 正如 VGR 所说,实际获取 JSON 作为字符串的代码没有显示。请添加它。请注意,根据规范,JSON 文件始终 编码为 UTF-8。

标签: java json eclipse utf-8 character-encoding


【解决方案1】:

如果您从File 读取JSON 有效负载,则需要使用JSONTokener。如果您的Java 类中有JSON 作为String,请检查文件是否以UTF-8 编码存储。示例代码:

import org.json.JSONObject;
import org.json.JSONTokener;

import java.io.File;
import java.io.FileReader;

public class OrgJsonApp {

    public static void main(String[] args) throws Exception {
        final String key = "Laptopà";

        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        // Read from file
        JSONObject jsonObject = new JSONObject(new JSONTokener(new FileReader(jsonFile)));
        System.out.println(jsonObject.getString(key));

        // Read from `JSON` string
        System.out.println(new JSONObject("{\"Laptopà\":\"Dell\"}").getString(key));
    }
}

以上代码正确打印Dell 两次。

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 2018-11-05
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2018-08-30
    相关资源
    最近更新 更多