13
我試圖解析以下JSON和我不斷收到一個JsonParseException:傑克遜JSON解析器無效UTF-8起始字節
{
"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."
}
}
例外:
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 class Main {
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();
}
}
}
我下載一個JSON字符串響應,UTF-8和內容爲.txt文件(UTF-8)寫在我的Android SD存儲,然後複製該文件到我的桌面。 –
另外我在Windows上使用記事本打開文件。 –
在這個過程中的某個地方,你的_believe_是UTF-8,實際上是Windows-1252。我的猜測是原始下載是錯誤標記的。順便說一句,0x96是字符「en-dash」,這是MS Word用於連字符的地方。在第二個例子中,罪魁禍首是省略號字符,也是MS Word的特質。 –