首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSON不确定字符串错误

JSON不确定字符串错误
EN

Stack Overflow用户
提问于 2015-07-18 03:50:44
回答 3查看 73关注 0票数 0

我的Android应用程序的HTTP请求出现问题。

我正在尝试获取这个JSON字符串:

代码语言:javascript
复制
{
    "produto": [
        {
            "pro_id": 2,
            "pro_nome": "MELAO TIPO12"
        },
        {
            "pro_id": 3,
            "pro_nome": "MAMAO PAPAIA TIPO 15"
        },
        {
            "pro_id": 4,
            "pro_nome": "MELANCIA GRANDE"
        },
        {
            "pro_id": 11,
            "pro_nome": "MARACUJA SUPER"
        },
        {
            "pro_id": 17,
            "pro_nome": "MORANGO"
        },
        {
            "pro_id": 18,
            "pro_nome": "MANGA THOMY 12"
        },
        {
            "pro_id": 19,
            "pro_nome": "ABACAXI PEROLA TIPO 5"
        },
        {
            "pro_id": 20,
            "pro_nome": "ABACAXI PEROLA TIPO 15"
        },
        {
            "pro_id": 21,
            "pro_nome": "ABACAXI HAWAI 1IPO 4"
        },
        {
            "pro_id": 22,
            "pro_nome": "ABACAXI HAWAI TIPO 15"
        },
        {
            "pro_id": 23,
            "pro_nome": "ABACAXI HAWAI TIPO 5"
        },
        {
            "pro_id": 29,
            "pro_nome": "ABACAXI PEROLA TIPO 4"
        },
        {
            "pro_id": 30,
            "pro_nome": "ABACAXI PEROLA TIPO 5 PEQUENO"
        },
        {
            "pro_id": 36,
            "pro_nome": "ABACAXI HAWAI TIPO 10"
        },
        {
            "pro_id": 41,
            "pro_nome": "ABACATE"
        },
        {
            "pro_id": 44,
            "pro_nome": "AMEIXA IMPORT"
        },
        {
            "pro_id": 45,
            "pro_nome": "AMENDOIM TORRADO COM CASCA"
        },
        {
            "pro_id": 51,
            "pro_nome": "MARACUJA 3A"
        },
        {
            "pro_id": 52,
            "pro_nome": "MARACUJA 2A"
        },
        {
            "pro_id": 53,
            "pro_nome": "MANGA THOMY TIPO 15"
        },
        {
            "pro_id": 56,
            "pro_nome": "MAMAO PAPAIA TIPO 18"
        },
        {
            "pro_id": 59,
            "pro_nome": "MAMAO PAPAI 21"
        },
        {
            "pro_id": 60,
            "pro_nome": "COCO SECO 10"
        },
        {
            "pro_id": 61,
            "pro_nome": "COCO SECO 20"
        },
        {
            "pro_id": 64,
            "pro_nome": "MELAO TIPO 10"
        },
        {
            "pro_id": 66,
            "pro_nome": "MELAO TIPO7"
        },
        {
            "pro_id": 68,
            "pro_nome": "MACA FUJI 100 CAT1"
        },
        {
            "pro_id": 70,
            "pro_nome": "MACA FUJI 150"
        },
        {
            "pro_id": 71,
            "pro_nome": "MACA GALA CAT1 120"
        },
        {
            "pro_id": 73,
            "pro_nome": "MACA GALA 120 CAT2"
        },
        {
            "pro_id": 76,
            "pro_nome": "MELANCIA JAPONESA"
        },
        {
            "pro_id": 77,
            "pro_nome": "MELANCIA MEDIA"
        },
        {
            "pro_id": 78,
            "pro_nome": "MELANCIA PEQUENA"
        },
        {
            "pro_id": 79,
            "pro_nome": "MACA GALA150"
        },
        {
            "pro_id": 80,
            "pro_nome": "MACA GALA180"
        },
        {
            "pro_id": 81,
            "pro_nome": "MACA GALA216"
        },
        {
            "pro_id": 82,
            "pro_nome": "MACA GALA 135 CAT 1"
        },
        {
            "pro_id": 84,
            "pro_nome": "MACA FUJI120"
        },
        {
            "pro_id": 85,
            "pro_nome": "MACA FUJI GRANEL"
        },
        {
            "pro_id": 86,
            "pro_nome": "MACA GALA GRANEL"
        },
        {
            "pro_id": 87,
            "pro_nome": "MACA ARGENTINA100"
        },
        {
            "pro_id": 88,
            "pro_nome": "MACA VERDE "
        },
        {
            "pro_id": 89,
            "pro_nome": "PERA T90"
        },
        {
            "pro_id": 90,
            "pro_nome": "UVA RED GLOB"
        },
        {
            "pro_id": 91,
            "pro_nome": "UVA TOPSON"
        },
        {
            "pro_id": 92,
            "pro_nome": "PESSEGO IMPORT"
        },
        {
            "pro_id": 94,
            "pro_nome": "KIWI IMPORT"
        },
        {
            "pro_id": 95,
            "pro_nome": "NECTARINA "
        },
        {
            "pro_id": 96,
            "pro_nome": "PERA ESPANHOLA "
        },
        {
            "pro_id": 97,
            "pro_nome": "PERA PORTUGUESA"
        }
    ]
}

但是我得到了这个异常Unterminated object at character 1927 of "MY JSON STRING"

这是我的方法,它向URL发出HTTP请求:

代码语言:javascript
复制
  public String ConsultaServidor(String URL_STRING) throws IOException {
        InputStream is = null;

        try {
            URL url = new URL(URL_STRING);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(10000);
            conn.setReadTimeout(15000);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.connect();
            conn.getResponseCode();

            is = conn.getInputStream();

            Reader reader = null;
            reader = new InputStreamReader(is);
            char[] buffer = new char[4096];
            reader.read(buffer);
            return new String(buffer);
        } finally {
            if (is != null) {
                is.close();
            }
        }
    }

有人能帮我一下吗?

EN

回答 3

Stack Overflow用户

发布于 2015-07-18 04:07:53

在阅读时最好像BufferedReader那样使用一些缓冲区,而不是单独使用InputStreamReader,比如:

代码语言:javascript
复制
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s = null;
StringBuilder sb = new StringBuilder ();
while((s = br.readLine()) != null )
sb.append(s); 
return sb.toString();
票数 1
EN

Stack Overflow用户

发布于 2015-07-18 04:12:57

使用从输入流读取的单个缓冲区意味着,如果您拥有的字符数少于缓冲区中的字符数,则字符串的末尾将以许多零字符(ASCII '\u0000')结尾。

如果你有比缓冲区大小更多的字符,那么你的字符串将只包含前4096个字符,所以它被切成了中间。

读取输入流的通常方法是使用循环。您可以将整个输入流读取到内存中,也可以使用直接使用输入流的JSON解析器。

因为我不知道您使用的是什么JSON解析器,所以我将演示一种方法。

代码语言:javascript
复制
        is = conn.getInputStream();

        StringBuilder sb = new StringBuilder();

        try ( Reader reader = new InputStreamReader(is) ) {
            char[] buffer = new char[4096];
            int numRead;
            while ( (numRead = reader.read(buffer)) != -1 ) {
                sb.append(buffer, 0, numRead );
            }
        } catch ( IOException e ) {
            e.printStackTrace(); // Or other exception handling
        }

        return sb.toString();

请注意,在此方法中,您将一直读到流的末尾,也就是从read返回的值为-1时。并且每次只追加实际读取的字符数(不一定是4096!)字符串生成器。

还要注意的是,你有一个try-with-resources,确保在你完成的时候关闭阅读器。

另一种方法是使用BufferedReader并逐行读取,直到文件结束。

票数 0
EN

Stack Overflow用户

发布于 2015-07-18 04:22:46

解决方案是更改代码。就像安基特说的那样,使用BufferedReader..

最后的代码是:

代码语言:javascript
复制
 public String ConsultaServidor(String URL_STRING) throws IOException {
        //InputStream is = null;

        try {
            URL url = new URL(URL_STRING);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(10000);
            conn.setReadTimeout(15000);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.connect();
            conn.getResponseCode();


            // is = conn.getInputStream();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    conn.getInputStream()));

            // Reader reader = null;
            // reader = new InputStreamReader(is);
            String inputLine;
            String responseData;
            responseData = "";
            while ((inputLine = in.readLine()) != null) // read till you can receive any data
                responseData += inputLine;
            in.close();
            return new String(responseData);
        } finally {
            //if (in != null) {
            //    in.close();
            // }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31483668

复制
相关文章

相似问题

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