gpt4 book ai didi

java - Jackson JSON 解析器无效的 utf-8 起始字节

转载 作者:太空狗 更新时间:2023-10-29 22:34:41 25 4
gpt4 key购买 nike

我正在尝试解析以下 JSON,但一直收到 JsonParseException:

{
"episodes":{
"description":"Episode 3 – Oprah's Surprise Patrol from 1\/20\/04\nTake a trip down memory lane and hear all your favorite episodes of The Oprah Winfrey Show from the last 25 seasons -- everyday on your radio!"
}
}

在这个 JSON 上也失败了

{
"episodes":{
"description":"After 20 years in sports talk…he’s still the top dog! Catch Christopher “Mad Dog” Russo weekday afternoons on Mad Dog Radio as he tells it like it is…Give the Doggie a call at 888-623-3646."
}
}

异常(exception):

org.codehaus.jackson.JsonParseException: Invalid UTF-8 start byte 0x96
at [Source: C:\Json Test Files\episodes.txt; line: 3, column: 33]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1291)
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385)
at org.codehaus.jackson.impl.Utf8StreamParser._reportInvalidInitial(Utf8StreamParser.java:2236)
at org.codehaus.jackson.impl.Utf8StreamParser._reportInvalidChar(Utf8StreamParser.java:2230)
at org.codehaus.jackson.impl.Utf8StreamParser._finishString2(Utf8StreamParser.java:1467)
at org.codehaus.jackson.impl.Utf8StreamParser._finishString(Utf8StreamParser.java:1394)
at org.codehaus.jackson.impl.Utf8StreamParser.getText(Utf8StreamParser.java:113)
at com.niveus.jackson.Main.parseEpisodes(Main.java:37)
at com.niveus.jackson.Main.main(Main.java:13)

代码:

    public static void main(String [] args) {
parseEpisodes("C:\\Json Test Files\\episodes.txt");
}
public static void parseEpisodes(String filename) {
JsonFactory factory = new JsonFactory();
JsonParser parser = null;
String nameField = null;

try {
parser = factory.createJsonParser(new File(filename));

parser.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
parser.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);

JsonToken token = parser.nextToken();
nameField = parser.getText();
String desc = null;

while (token != JsonToken.END_OBJECT) {
if (nameField.equals("episodes")) {
while (token != JsonToken.END_OBJECT) {
if (nameField.equals("description")) {
parser.nextToken();
desc = parser.getText();
}

token = parser.nextToken();
nameField = parser.getText();
}
}

token = parser.nextToken();
nameField = parser.getText();
}

System.out.println(desc);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

最佳答案

第 33 列的字符是 ,这是字节 0x96 的原因是文件物理编码为 Windows-1252。您需要以 UTF-8 格式保存文件,windows-1252 不是 json 的有效编码。如何执行此操作取决于您使用的文本编辑器。

参见 JSON RFC :

  1. Encoding

    JSON text SHALL be encoded in Unicode. The default encoding is
    UTF-8.

关于java - Jackson JSON 解析器无效的 utf-8 起始字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com