当前位置: 首页 > 面试题库 >

获取没有数组名称的JSONArray吗?

解沈义
2023-03-14
问题内容

我是JSON的新手,请尝试使用本教程:http : //p-xr.com/android-tutorial-
how-to-parse-read-json-data-into-a-android-
listview/#comments

我是JSON,C语言,Java和Android的新手,但我正在学习。本教程使用的是我所说的命名数组,但是我将在我的android项目中使用的所有JSON将使用没有命名数组的简单表行。我正在使用的JSON和教程中的地震json的示例如下。

本教程遍历地震数组,并使用以下代码将其转换为JAVA哈希图列表:

JSONArray  earthquakes = json.getJSONArray("earthquakes");
    for(int i=0;i<earthquakes.length();i++){                        
        HashMap<String, String> map = new HashMap<String, String>();    
        JSONObject e = earthquakes.getJSONObject(i);

        map.put("id",  String.valueOf(i));
        map.put("name", "Earthquake name:" + e.getString("eqid"));
        map.put("magnitude", "Magnitude: " +  e.getString("magnitude"));
        mylist.add(map);            
}

我的问题是,json.getJSONArray("")如果我的JSON如下所示,该如何使用?我可以转换其余的代码,getJSONArray("strJsonArrayName")如果我没有,我只需要知道如何使用来加载JSON
strJsonArrayName

我的JSON(未命名数组)

[
  {
    "cnt":1,
    "name":"American",
    "pk":7
  },
  {
    "cnt":2,
    "name":"Celebrities",
    "pk":3
  },
  {
    "cnt":1,
    "name":"Female",
    "pk":2
  },
  {
    "cnt":1,
    "name":"Language",
    "pk":8
  },
  {
    "cnt":1,
    "name":"Male",
    "pk":1
  },
  {
    "cnt":1,
    "name":"Region",
    "pk":9
  }
]

教程的JSON(命名数组)

{
  "earthquakes":[
    {
      "eqid":"c0001xgp",
      "magnitude":8.8,
      "lng":142.369,
      "src":"us",
      "datetime":"2011-03-11 04:46:23",
      "depth":24.4,
      "lat":38.322
    },
    {
      "eqid":"c000905e",
      "magnitude":8.6,
      "lng":93.0632,
      "src":"us",
      "datetime":"2012-04-11 06:38:37",
      "depth":22.9,
      "lat":2.311
    },
    {
      "eqid":"2007hear",
      "magnitude":8.4,
      "lng":101.3815,
      "src":"us",
      "datetime":"2007-09-12 09:10:26",
      "depth":30,
      "lat":-4.5172
    },
    {
      "eqid":"c00090da",
      "magnitude":8.2,
      "lng":92.4522,
      "src":"us",
      "datetime":"2012-04-11 08:43:09",
      "depth":16.4,
      "lat":0.7731
    },
    {
      "eqid":"2007aqbk",
      "magnitude":8,
      "lng":156.9567,
      "src":"us",
      "datetime":"2007-04-01 18:39:56",
      "depth":10,
      "lat":-8.4528
    },
    {
      "eqid":"2007hec6",
      "magnitude":7.8,
      "lng":100.9638,
      "src":"us",
      "datetime":"2007-09-12 21:49:01",
      "depth":10,
      "lat":-2.5265
    },
    {
      "eqid":"a00043nx",
      "magnitude":7.7,
      "lng":100.1139,
      "src":"us",
      "datetime":"2010-10-25 12:42:22",
      "depth":20.6,
      "lat":-3.4841
    },
    {
      "eqid":"2010utc5",
      "magnitude":7.7,
      "lng":97.1315,
      "src":"us",
      "datetime":"2010-04-06 20:15:02",
      "depth":31,
      "lat":2.3602
    },
    {
      "eqid":"2009mebz",
      "magnitude":7.6,
      "lng":99.9606,
      "src":"us",
      "datetime":"2009-09-30 08:16:09",
      "depth":80,
      "lat":-0.7889
    },
    {
      "eqid":"2009kdb2",
      "magnitude":7.6,
      "lng":92.9226,
      "src":"us",
      "datetime":"2009-08-10 17:55:39",
      "depth":33.1,
      "lat":14.0129
    }
  ]
}

在本教程中,基于@MДΓΓБДLL和@Cody
Caughlan的答案,我能够将JSONFunctions.getJSONFromURL格式化为JSONArray而不是JSONObject。这是我修改后的工作代码,谢谢!

public class JSONfunctions {
public static JSONArray getJSONfromURL(String url){
    InputStream is = null;
    String result = "";
    JSONArray jArray = null;

            HttpClient httpclient = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(url);
            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
            }
            is.close();
            result=sb.toString();

        jArray = new JSONArray(result);            
    return jArray;
}
}

问题答案:

您根本不需要调用json.getJSONArray(),因为您正在使用的JSON 一个数组。因此,请勿构造JSONObject;
的实例。使用一个JSONArray。这样就足够了:

// ...
JSONArray json = new JSONArray(result);
// ...

for(int i=0;i<json.length();i++){                        
    HashMap<String, String> map = new HashMap<String, String>();    
    JSONObject e = json.getJSONObject(i);

    map.put("id",  String.valueOf(i));
    map.put("name", "Earthquake name:" + e.getString("eqid"));
    map.put("magnitude", "Magnitude: " +  e.getString("magnitude"));
    mylist.add(map);            
}

您不能使用与本教程中完全相同的方法,因为您要处理的JSON必须JSONArray从根解析为,而不是JSONObject



 类似资料:
  • 问题内容: 我需要获取JsonArray的键名,所以JSON看起来像这样,请不要,因为JSON是从数组括号开始的,并且其中包含对象,这是我想做的,因为后端将具有添加对象的能力。 因此,我需要从中获得“技术”和“科学”的名称,因为json可以动态更改,我该如何实现呢? 问题答案: 该包含秒。检索每个并用于访问每个中定义的密钥

  • 我想从这个链接获取一个url: 它给出结果: { " data ":{ " URL ":" https://FBC dn-profile-a . akamaihd . net/hprofile-AK-xa P1/t 1.0-1/s200x 200/10342822 _ 10202261537234765 _ 3194866551853134720 _ n . jpg "," is_silhouet

  • 我想知道下面的模式对于Avro模式是否有效。请注意,字段数组的第一个对象中缺少名称。 它实际上是针对以下类型的数据设计的 根据下面的阅读,似乎没有名字的数组是不允许的 Avro架构失败 https://avro.apache.org/docs/current/spec.html#schema_complex 我怀疑下面是正确的 它应该有如下数据,以便成功进行avro转换 下面的模式是否有效?在第一

  • 示例JSON 我想要一个数组[属性1,属性2] 如何使用est保证的JSON路径提取器实现?

  • 问题内容: 我有一个Json Array作为没有名称的字符串,我想解析它如何在android中进行? 我的JsonArray是: 问题答案: 试试这个..

  • 我有一些数组,如果它们包含类似的值,我想返回这些数组的名称。 我有我的变量,它有多个数组,名字要么是,要么是,要么是。包含的只是变量中某些数组中相同的值。我需要返回数组中包含、和的数组的名称。因此,对于这个示例,我需要返回:。 通过这个函数抛出它们时,我得到一个错误。如何获取返回的数组?