首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效的JSON字符串抛出异常变量为空的JSONException

有效的JSON字符串抛出异常变量为空的JSONException
EN

Stack Overflow用户
提问于 2012-05-08 06:33:36
回答 2查看 1K关注 0票数 2

我的系统基于android客户端和wcf - rest - web服务。我正在使用这个教程:http://fszlin.dymetis.com/post/2010/05/10/Comsuming-WCF-Services-With-Android.aspx我遇到了一个奇怪的问题。我有一个有效的JSON字符串(用在线工具检查过),对缓冲区的读取正常,但当我试图创建一个JSON数组时,它抛出了JSONException而没有异常变量(该变量为NULL --我以前从未遇到过)抛出异常的代码行:

代码语言:javascript
复制
    request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpResponse response = httpClient.execute(request);

            HttpEntity responseEntity = response.getEntity();

            // Read response data into buffer
            char[] buffer = new char[(int)responseEntity.getContentLength()];
            InputStream stream = responseEntity.getContent();
            InputStreamReader reader = new InputStreamReader(stream);
            reader.read(buffer);
            stream.close();

            JSONArray plates = new JSONArray(new String(buffer));

最后一行抛出异常。

来自该服务的文本如下:{"dtFromDate":"1899-12-30 20:00:00","fBuyWindow":120,"fNewPrice":150,"fOldPrice":400,"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":1,"nRange":5,"nStickingHours":48,“strDetailedDescription”:“נעלינייקמסוגN95,חולון.”,“strDisplayAddress”:“נעלינייקמסוג49,הנעלייםשללאונלמסי,בהנחהמטורפת”,“strFullAddress”:“strItemDescrpition 49,חנקין”,חולון,ישראל“strItemDescrpition”:“נעלינייקדגםN95לבן","strThumbPath":"http://images.free-extras.com/pics/n/nike_swoosh-703.jpg",”strTitle“:”נעלינייקדגם“},{”fBuyWindow“:”1899-12-30 20:00:00",“נייקקניוןחולון”:120,"fNewPrice":150,"fOldPrice":400,"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":2,"nRange":5,"nStickingHours":48,“strDetailedDescription”:“N95,חולון,ישראל.”,"strDisplayAddress":"","strFullAddress":"חנקין49,חולון,ישראל“,"strImagePath":"",”strItemDescrpition“:”נעלינייקדגםN95לבן","strThumbPath":"",“strTitle”:"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":3,"nRange":5,"nStickingHours":48,“strDetailedDescription”:“N95,הנעלייםשללאונלמסי,בהנחהמטורפת.”,“strFullAddress”:“1899-12-30 20:00:00","fBuyWindow":120,"fNewPrice":150,"fOldPrice":400,"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":4,”חנקיןlLongitude“:34.776452,”nDestinatedPlatform“:1,”נייקקניוןחולון“},"nRange":5,"nStickingHours":48,“strDetailedDescription”:“strImagePath,הנעלייםשללאונלמסי,בהנחהמטורפת.”,"strDisplayAddress":"",“strFullAddress”:“נעלינייקמסוג49,הנעלייםשללאונלמסי,בהנחהמטורפת”,“N95”:“”,“strThumbPath”:“strTitle”:“נייקקניוןחולון”},{"dtFromDate":"1899-12-30 20:00:00","fBuyWindow":120,"fNewPrice":150,“נעלינייקמסוגN95חולון,ישראל”,“נעלינייקדגםנייקקניוןחולון”:150,"fOldPrice":400,"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":5,"nRange":5,"nStickingHours":48,“strDetailedDescription”:“N95,חולון,ישראל.”,"strDisplayAddress":"",“strFullAddress”:“strImagePath 49,הנעלייםשללאונלמסי,בהנחהמטורפת”,“N95”:“”,“strThumbPath”:“נעלינייקמסוגחנקיןחולון,ישראל”,“”,“strTitle”:“נייקקניוןחולון”}

有什么建议吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-09 07:19:55

尝试以下操作。

更改此行...

代码语言:javascript
复制
char[] buffer = new char[(int)responseEntity.getContentLength()];

...to使用字节数组,如下所示...

代码语言:javascript
复制
byte[] buffer = new byte[(int)responseEntity.getContentLength()];

你必须忘记使用InputStreamReader,因为它只适用于char[]。取而代之的是使用...

代码语言:javascript
复制
stream.read(buffer);

然后更改这一行。

代码语言:javascript
复制
JSONArray plates = new JSONArray(new String(buffer));

...to this以创建一个UTF8编码字符串...

代码语言:javascript
复制
JSONArray plates = new JSONArray(new String(buffer, "UTF-8"));
票数 0
EN

Stack Overflow用户

发布于 2012-05-08 08:54:14

我建议这样做:

代码语言:javascript
复制
String newString = reader.read(buffer); //assuming you only get one line in response, rather than many (add a loop if so)
JSONArray plates = new JSONArray(newString);

这可能会有所帮助。另外,下面是我使用JSONArray编写的一些与JSON相关的代码:

代码语言:javascript
复制
public JSONArray getQuestionsJSONFromUrl(String url, List<NameValuePair> params) {  
    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        String jsonData = reader.readLine();
        JSONArray jarr = new JSONArray(jsonData);
        is.close();
        return jarr;
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }
    return null;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10490055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档