JSONParser在位置0返回Unexpected character()

时间:2017-12-14 17:35:27

标签: java json jsonparser

我有解决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:

  1. 我的回复返回格式正确的JSON;
  2. 当这段代码运行object = new JSONParser().parse(builder.toString());
  3. 时会出现问题

    是我的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
       }
    ]
    

5 个答案:

答案 0 :(得分:1)

很可能你的内容在开始时有一些未打印的特殊字符。对于UTF-8编码数据,这可能是BOM。

请将您的内容发布为byte[]

答案 1 :(得分:0)

使用此而不是BufferReader

Map<String,Object> result 
            = (Map<String,Object>)JSONValue.parse(IOUtils.toString(response.getEntity().getContent(), "utf-8"));

您可以将JsonData放入Map中,只需迭代地图即可。

答案 2 :(得分:0)

我相信你的问题在于内容类型。使用这样的东西:

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可以很好地处理它。 希望它有所帮助!

答案 3 :(得分:0)

我发现了问题!

我的JSON返回了一个不同的空格字符,所以我确实在我的代码中添加了这个::

String content = builder.toString();
content = content.replaceAll("\\uFEFF", "");

这个 \ uFEFF 是我的问题!在我的Dev环境中,它不会发生,只是在生产环境中!

答案 4 :(得分:0)

发生这种情况的原因是UTF-8 BOM。 什么是 UTF-8 BOM ? UTF-8 BOM是一个字节序列(EF BB BF),使读者可以识别文件是否已以UTF-8编码。

通常,BOM用于表示编码的字节序,但是由于字节序与UTF-8无关,因此不需要BOM。

如何解决该问题? 将您的.json或任何文件的encoding转换为UTF-8而不是UTF-8 BOM。 这样。

enter image description here