JSONParser returns 位置 0 处的意外字符 ()
JSONParser returns Unexpected character () at position 0
我在解析 JSON 时遇到问题。我总是尝试这样做,返回的结果如下:位置 0 处的意外字符 ()。
public Object execute(HttpRequestBase request){
DefaultHttpClient client = new DefaultHttpClient();
HttpResponse response = null;
Object object = null;
try {
response = client.execute(request);
InputStream is = response.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader((is)));
StringBuilder builder = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
builder.append(output).append("\n");
}
if (response.getStatusLine().getStatusCode() == 200) {
object = new JSONParser().parse(builder.toString());
client.getConnectionManager().shutdown();
} else {
LOG.log(Level.SEVERE, builder.toString());
throw new RuntimeException(builder.toString());
}
} catch (IOException | ParseException ex) {
LOG.log(Level.SEVERE, ex.toString());
} finally {
}
return object;
}
PS:
- 我的回复returns JSON 格式正确;
- 当这段代码为运行
object = new JSONParser().parse(builder.toString());
时出现问题
这是我的 JSON 文件的一部分:
[
{
"id":2115,
"identificacao":"17\/2454634-6",
"ultima_atualizacao":null
},
{
"id":2251,
"identificacao":"17\/3052383-2",
"ultima_atualizacao":"2017-11-21"
},
{
"id":2258,
"identificacao":"17\/3070024-6",
"ultima_atualizacao":null
},
{
"id":2257,
"identificacao":"17\/3070453-5",
"ultima_atualizacao":null
}
]
很可能您的内容开头有一些未打印的特殊字符。对于 UTF-8 编码数据,这可能是 BOM。
请post开始你的内容byte[]
。
用这个代替 BufferReader
Map<String,Object> result
= (Map<String,Object>)JSONValue.parse(IOUtils.toString(response.getEntity().getContent(), "utf-8"));
您会将 JsonData 放入 Map 中,并且您可以简单地遍历 map。
我认为您的问题出在内容类型上。使用这样的东西:
HttpEntity content = response.getEntity();
StringBuilder sb = new StringBuilder();
InputStream is = content.getContent();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
int character;
do {
character = isr.read();
if (character >= 0) {
sb.append((char) character);
}
} while (character >= 0);
return sb.toString();
不需要BufferedReader,InputStreamReader可以很好地处理它。
希望对您有所帮助!
我找到问题了!
我的 JSON 返回了一个不同的 space 字符,所以我在我的代码中添加了这个::
String content = builder.toString();
content = content.replaceAll("\uFEFF", "");
这个 \uFEFF 是我的问题!在我的开发环境中,它不会发生,只是在生产环境中!
这是因为 UTF-8 BOM。
什么是 UTF-8 BOM?
UTF-8 BOM 是一个字节序列 (EF BB BF),它允许 reader 将文件标识为以 UTF-8 编码。
通常,BOM 用于表示编码的字节顺序,但由于字节顺序与 UTF-8 无关,因此不需要 BOM。
如何解决这个问题?
将 .json 或任何文件的 encoding
转换为 UTF-8 而不是 UTF-8 BOM。
像这样。
我在解析 JSON 时遇到问题。我总是尝试这样做,返回的结果如下:位置 0 处的意外字符 ()。
public Object execute(HttpRequestBase request){
DefaultHttpClient client = new DefaultHttpClient();
HttpResponse response = null;
Object object = null;
try {
response = client.execute(request);
InputStream is = response.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader((is)));
StringBuilder builder = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
builder.append(output).append("\n");
}
if (response.getStatusLine().getStatusCode() == 200) {
object = new JSONParser().parse(builder.toString());
client.getConnectionManager().shutdown();
} else {
LOG.log(Level.SEVERE, builder.toString());
throw new RuntimeException(builder.toString());
}
} catch (IOException | ParseException ex) {
LOG.log(Level.SEVERE, ex.toString());
} finally {
}
return object;
}
PS:
- 我的回复returns JSON 格式正确;
- 当这段代码为运行
object = new JSONParser().parse(builder.toString());
时出现问题
这是我的 JSON 文件的一部分:
[
{
"id":2115,
"identificacao":"17\/2454634-6",
"ultima_atualizacao":null
},
{
"id":2251,
"identificacao":"17\/3052383-2",
"ultima_atualizacao":"2017-11-21"
},
{
"id":2258,
"identificacao":"17\/3070024-6",
"ultima_atualizacao":null
},
{
"id":2257,
"identificacao":"17\/3070453-5",
"ultima_atualizacao":null
}
]
很可能您的内容开头有一些未打印的特殊字符。对于 UTF-8 编码数据,这可能是 BOM。
请post开始你的内容byte[]
。
用这个代替 BufferReader
Map<String,Object> result
= (Map<String,Object>)JSONValue.parse(IOUtils.toString(response.getEntity().getContent(), "utf-8"));
您会将 JsonData 放入 Map 中,并且您可以简单地遍历 map。
我认为您的问题出在内容类型上。使用这样的东西:
HttpEntity content = response.getEntity();
StringBuilder sb = new StringBuilder();
InputStream is = content.getContent();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
int character;
do {
character = isr.read();
if (character >= 0) {
sb.append((char) character);
}
} while (character >= 0);
return sb.toString();
不需要BufferedReader,InputStreamReader可以很好地处理它。 希望对您有所帮助!
我找到问题了!
我的 JSON 返回了一个不同的 space 字符,所以我在我的代码中添加了这个::
String content = builder.toString();
content = content.replaceAll("\uFEFF", "");
这个 \uFEFF 是我的问题!在我的开发环境中,它不会发生,只是在生产环境中!
这是因为 UTF-8 BOM。 什么是 UTF-8 BOM? UTF-8 BOM 是一个字节序列 (EF BB BF),它允许 reader 将文件标识为以 UTF-8 编码。
通常,BOM 用于表示编码的字节顺序,但由于字节顺序与 UTF-8 无关,因此不需要 BOM。
如何解决这个问题?
将 .json 或任何文件的 encoding
转换为 UTF-8 而不是 UTF-8 BOM。
像这样。