Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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/220.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 如何在Android中解析JSON数组(不是JSON对象)_Java_Android_Json_Gson_Arrays - Fatal编程技术网

Java 如何在Android中解析JSON数组(不是JSON对象)

Java 如何在Android中解析JSON数组(不是JSON对象),java,android,json,gson,arrays,Java,Android,Json,Gson,Arrays,我很难找到解析JSONArray的方法。 看起来是这样的: [{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...] 如果JSON的编写方式不同(换句话说,如果返回的是JSON对象而不是对象数组),我知道如何解析它。 但这是我所拥有的一切,我必须去做 *编辑:它是一个有效的json。我用这个json制作了一个iPhone应用程序,现在我需要为Android做这个程序,但我想不出来。 有很多例子,但它们都与JSONObje

我很难找到解析JSONArray的方法。 看起来是这样的:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]
如果JSON的编写方式不同(换句话说,如果返回的是JSON对象而不是对象数组),我知道如何解析它。 但这是我所拥有的一切,我必须去做

*编辑:它是一个有效的json。我用这个json制作了一个iPhone应用程序,现在我需要为Android做这个程序,但我想不出来。 有很多例子,但它们都与JSONObject相关。我需要些东西给JSONArray

有人能给我一些提示,或者一个教程或者一个例子吗


非常感谢

使用以下代码段来解析JsonArray

JSONArray jsonarray = new JSONArray(jsonStr);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    String url = jsonobject.getString("url");
}
JSONArray-JSONArray=新的JSONArray(jsonStr);
for(int i=0;i

希望有帮助。

创建一个类来保存对象

public class Person{
   private String name;
   private String url;
   //Get & Set methods for each field
}
然后按如下方式反序列化:

Gson gson = new Gson();
Person[] person = gson.fromJson(input, Person[].class); //input is your String

参考文章:

@Stebra请参见此示例。这可能对你有帮助

public class CustomerInfo 
{   
    @SerializedName("customerid")
    public String customerid;
    @SerializedName("picture")
    public String picture;

    @SerializedName("location")
    public String location;

    public CustomerInfo()
    {}
}
当你得到结果时;像这样解析

List<CustomerInfo> customers = null;
customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType());
列出客户=null;
customers=(List)gson.fromJson(结果,newTypeToken(){}.getType());

在本例中,一个json数组中有多个对象。就是

这是json数组:[{“name”:“name1”,“url”:“url1”},{“name”:“name2”,“url”:“url2”},…]

这是一个对象:{“name”:“name1”,“url”:“url1”}

假设您已获得名为jSonResultString的字符串变量的结果:

JSONArray arr = new JSONArray(jSonResultString);

  //loop through each object
  for (int i=0; i<arr.length(); i++){

  JSONObject jsonProductObject = arr.getJSONObject(i);
  String name = jsonProductObject.getString("name");
  String url = jsonProductObject.getString("url");


}
JSONArray arr=新的JSONArray(jSonResultString);
//循环遍历每个对象
对于(int i=0;i我只举一个小例子:

首先创建一个数据持有者,其中包含来自JSON字符串的字段

// imports
// ...
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyDataHolder {
    @JsonProperty("name")
    public String mName;

    @JsonProperty("url")
    public String mUrl;
}
并解析MyDataholder的列表

String jsonString = // your json
ObjectMapper mapper = new ObjectMapper();
List<MyDataHolder> list = mapper.readValue(jsonString, 
    new TypeReference<ArrayList<MyDataHolder>>() {});

已经提到了一些很好的建议。 使用GSON确实很方便,为了让生活更轻松,你可以试试这个 它被称为jsonschema2pojo,其功能正是:

您将json提供给它,它将生成一个可以粘贴到项目中的java对象。 您可以选择GSON来注释变量,这样从json中提取对象就更容易了!

MyCase 从服务器加载示例

int jsonLength = Integer.parseInt(jsonObject.getString("number_of_messages"));
            if (jsonLength != 1) {
                for (int i = 0; i < jsonLength; i++) {
                    JSONArray jsonArray = new JSONArray(jsonObject.getString("messages"));
                    JSONObject resJson = (JSONObject) jsonArray.get(i);
                    //addItem(resJson.getString("message"), resJson.getString("name"), resJson.getString("created_at"));
                }
int-jsonLength=Integer.parseInt(jsonObject.getString(“消息的数量”);
如果(jsonLength!=1){
for(int i=0;i

希望它能对我所知道的老帖子有所帮助,但除非我误解了这个问题,否则这应该会起到作用:

s = '[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"}]';
eval("array=" + s);
for (var i = 0; i < array.length; i++) {
for (var index in array[i]) {
    alert(array[i][index]);
}
s='[{“name”:“name1”,“url”:“url1”},{“name”:“name2”,“url”:“url2”}];
eval(“数组=”+s);
对于(var i=0;i

}为列表中的对象创建一个POJO Java类,如下所示:

class NameUrlClass{
       private String name;
       private String url;
       //Constructor
       public NameUrlClass(String name,String url){
              this.name = name;
              this.url = url; 
        }
}
List<NameUrlClass> obj = new ArrayList<NameUrlClass>;
现在只需创建NameUrlClass的列表并将其初始化为ArrayList,如下所示:

class NameUrlClass{
       private String name;
       private String url;
       //Constructor
       public NameUrlClass(String name,String url){
              this.name = name;
              this.url = url; 
        }
}
List<NameUrlClass> obj = new ArrayList<NameUrlClass>;


试试看你的json是否有效。你是否使用任何库来解析json?使用gson库进行json解析。非常有用。它是有效的。我在为iPhone开发的一个应用程序中解析了它,它正在工作。我只是不知道如何在Android@nikash是的,我注意到我可以使用gson。唯一的问题是,我找到的所有示例都是用于解析JSONObje的ct而不是JSONArrayPost您到目前为止尝试过的代码。相应地给出一个精确的答案会很有帮助。我评估了这个“输入”这是一个非常简单的解决方案。它应该是我的viewResult变量中被接受的一个。你的JSONArray StringResult变量是我需要从中获取json的URL还是已经获取json的URL?到目前为止,这是最简单的解决方案。你能给我一个例子,我如何从URL获取json作为字符串吗ve,拜托?
DefaultHttpClient
s execute方法是一个阻塞调用,因此它必须在后台任务中完成,只是为了弄清楚它为什么在单独的类中。我收到了一个关于HttpGetTask构造函数的错误。“构造函数HttpGetTask(OnHttpGetCompletedListener)引用了缺少的类型OnHttpGetCompletedListener”您导入了OnHttpGetCompletedListener吗?像这样
在这里导入您的\u包\u名称\u.HttpGetTask.OnHttpGetCompletedListener;
是的,这就是问题所在…感谢您解决了我的问题:)我很难从URL获取我的JSONstring。也许你能帮我一下吗?谢谢你用例子把它分解,很好的澄清只有一个问题如果jsonarray包含像[2].[4]这样的数字,并且里面的数字又包含一个数组,那么如果我想从中检索,尤其是嵌套在数字[4]中的数组在java代码中,我必须编写int i=4???@BiggDawgg:很高兴它对您有所帮助。在单独的线程中用JSON数据发布您的问题,这样我就可以很容易地回答.p.s“jsonObject.getString(“messages”)”类型是jsonArray;第一个存在的答案是不能将字符串转换为jsonArray;我正在修复它。还不清楚
obj=jsonArray;
应该做什么。在这个上下文中
jsonArray
是什么?它来自哪里?直接替换它时,用
new ArrayList
初始化
obj
的目的是什么不管怎么说,你是在事后才这么做的?
class NameUrlClass{
       private String name;
       private String url;
       //Constructor
       public NameUrlClass(String name,String url){
              this.name = name;
              this.url = url; 
        }
}
List<NameUrlClass> obj = new ArrayList<NameUrlClass>;
obj = JSONArray;//[{"name":"name1","url":"url1"}{"name":"name2","url":"url2"},...]