Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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 can';t获取格式正确的json对象_Java_Android_Json - Fatal编程技术网

Java can';t获取格式正确的json对象

Java can';t获取格式正确的json对象,java,android,json,Java,Android,Json,假设我从一个api中获取一些json数组 [{"id":1,"title":"title","description":"description","vote":null,"created_at":"2013-11-12T21:08:10.922Z","updated_at":"2013-11-12T21:08:10.922Z"}] 我想从URL\u SomeURL中以Some对象的形式检索这个json public class Some implements Serializable {

假设我从一个api中获取一些
json
数组

[{"id":1,"title":"title","description":"description","vote":null,"created_at":"2013-11-12T21:08:10.922Z","updated_at":"2013-11-12T21:08:10.922Z"}]
我想从
URL\u Some
URL中以
Some
对象的形式检索这个
json

public class Some implements Serializable {

    private String id;
    private String title;
    private String description;
    private String vote;
    private String created_at;
    private String updated_at;
    }//with all getters and setters

问题是我一直在收到这个信息

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
PS:我使用

import com.google.gson.Gson;

import com.google.gson.GsonBuilder;

import com.google.gson.JsonParseException;

您发布的JSON是一个JSON数组,由它周围的方括号表示:[]

您必须从JSON数组中读取第一个对象

我个人使用Android JSON的软件包,并以如下方式解析我的JSON:

private void parseJSON(String jsonString) {
JSONArray json;
    try {
        json = new JSONArray(jsonString);
        JSONObject jsonObject = jsonArray.getJSONObject(0);
        String id = jsonObject.getString("id");
    } catch (JSONException jsonex) {
        jsonex.printStackTrace();
    }
}

如果数组中有多个JSON对象,可以使用简单的for循环(不是针对每个对象!)对它们进行迭代。

您的JSON实际上应该是这样的:

private void parseJSON(String jsonString) {
JSONArray json;
    try {
        json = new JSONArray(jsonString);
        JSONObject jsonObject = jsonArray.getJSONObject(0);
        String id = jsonObject.getString("id");
    } catch (JSONException jsonex) {
        jsonex.printStackTrace();
    }
}
{“结果”:[{“id”:1,“title”:“title”,“description”:“description”,“vote”:null,“created_at”:“2013-11-12T21:08:10.922Z”,“updated_at”:“2013-11-12T21:08:10.922Z”}

Gson将尝试解析json并创建一个SomeWrapper对象。这就告诉Gson他将等待一个格式为
{…}
的json,因为他需要一个对象。然而,您传递了一个数组,这就是为什么它抱怨需要BEGIN_对象(
{
),但是需要BEGIN_数组(
[
)。之后,它会希望这个json对象有一个
结果
字段,该字段将保存一个对象数组

但是,您可以直接创建
列表
,而无需包装类。要执行此操作,请执行以下操作:

Type type= new TypeToken<List<Some>>() {}.getType();
List<Some> someList = new GsonBuilder().create().fromJson(jsonArray, type);
Type Type=new-TypeToken(){}.getType();
List someList=new GsonBuilder().create().fromJson(jsonArray,type);

在这种情况下,您可以使用您发布的原始json数组。

谢谢您,但是使用
Gson
更简单,因为它考虑了类来包装
json
。顺便说一句,我对
android
:我尝试将请求变量记录为:
log.d(“TAG”,String.valueOf(request))
但我的控制台中没有输入。你能解释一下吗?谢谢你,它起作用了,我只需要输入你的
fromJson
方法
Reader=request.bufferedReader();
,因为我的
请求
只是一个接口
Type type= new TypeToken<List<Some>>() {}.getType();
List<Some> someList = new GsonBuilder().create().fromJson(jsonArray, type);