Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ';JsonSyntaxException:com.google.gson.stream.MalformedJsonException:Unterminated object位于第1行第30列';_Java_Json - Fatal编程技术网

Java ';JsonSyntaxException:com.google.gson.stream.MalformedJsonException:Unterminated object位于第1行第30列';

Java ';JsonSyntaxException:com.google.gson.stream.MalformedJsonException:Unterminated object位于第1行第30列';,java,json,Java,Json,我的API响应如下: [ { "id": "123", "date": "2016-12-11T12:23:34Z", "description": "A bag of spanners", "amount": "35.25", "currency": "GBP" }, { "id": "124", "date": "2016-12-12T01:58:59Z", "description": "Hot chocholate",

我的API响应如下:

[
{
    "id": "123",
    "date": "2016-12-11T12:23:34Z",
    "description": "A bag of spanners",
    "amount": "35.25",
    "currency": "GBP"
},
{
    "id": "124",
    "date": "2016-12-12T01:58:59Z",
    "description": "Hot chocholate",
    "amount": "12.50",
    "currency": "GBP"
},
{
    "id": "125",
    "date": "2016-12-12T06:11:06Z",
    "description": "Subscriptions - Magazine",
    "amount": "5.99",
    "currency": "GBP"
},
{
    "id": "126",
    "date": "2016-12-13T10:03:17Z",
    "description": "Movie rental",
    "amount": "3.99",
    "currency": "GBP"
}]
我尝试使用java解析它,如下所示:

            Object object = (Object) HttpRequest.getInputStreamFromUrl(ApiUtils.getTransactionsUrl(), Object.class, mContext);
            Type typeMyType = new TypeToken<ArrayList<Transaction>>(){}.getType();
            Gson gson = new Gson();
            transactionList = gson.fromJson(object.toString(), typeMyType);
            String responseStr = (String) HttpRequest.getInputStreamFromUrl(ApiUtils.getTransactionsUrl(), mContext);
            Type typeMyType = new TypeToken<ArrayList<Transaction>>(){}.getType();
            Gson gson = new Gson();
            transactionList = gson.fromJson(responseStr.toString(), typeMyType);
Object Object=(Object)HttpRequest.getInputStreamFromUrl(aputils.getTransactionsUrl(),Object.class,mContext);
类型typeMyType=newTypeToken(){}.getType();
Gson Gson=新的Gson();
transactionList=gson.fromJson(object.toString(),typeMyType);
我在第1行第30列得到了“JsonSyntaxException:com.google.gson.stream.MalformedJsonException:Unterminated对象”

我还尝试了一些其他方法,导致
com.google.gson.internal.LinkedTreeMap无法转换为org.json.JSONObject


如何解析这种类型的JSON对象?

我能够通过将
InputStream
转换为
String
而不是
对象来解决这个问题。我使用了一种方法将
InputStream
直接转换为
Object
。但它有时似乎不起作用。我使用以下方法将
InputStream
转换为
String

    public static String convertStreamToString(HttpResponse response) {
    String responseBody = null;
    HttpEntity entity = response.getEntity();
    if (entity != null) {
        try {
            responseBody = EntityUtils.toString(entity);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return responseBody;
}
然后将返回的
字符串
转换为如下列表:

            Object object = (Object) HttpRequest.getInputStreamFromUrl(ApiUtils.getTransactionsUrl(), Object.class, mContext);
            Type typeMyType = new TypeToken<ArrayList<Transaction>>(){}.getType();
            Gson gson = new Gson();
            transactionList = gson.fromJson(object.toString(), typeMyType);
            String responseStr = (String) HttpRequest.getInputStreamFromUrl(ApiUtils.getTransactionsUrl(), mContext);
            Type typeMyType = new TypeToken<ArrayList<Transaction>>(){}.getType();
            Gson gson = new Gson();
            transactionList = gson.fromJson(responseStr.toString(), typeMyType);
String responsest=(String)HttpRequest.getInputStreamFromUrl(aputils.getTransactionsUrl(),mContext);
类型typeMyType=newTypeToken(){}.getType();
Gson Gson=新的Gson();
transactionList=gson.fromJson(responsest.toString(),typeMyType);

希望它能帮助那些面临同样问题的人。

你发布的JSON没有问题。
HttpRequest.getInputStreamFromUrl
返回什么?如果您从中获得它,它将返回一个
InputStream
而不是
字符串,这就是您的代码抱怨的原因。我将
object.toString(),
返回的不是您所期望的。同意@Unimportant的评论!如果返回的对象是
InputStream
,则可以参考以进行进一步分析。getInputStreamFromUrl返回一个对象。正如@LHCHIN所建议的,我将InputStream转换为字符串而不是对象。然后将字符串转换为我的类对象的列表-工作正常。非常感谢。