Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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
Android应用程序中JSON文件的解析_Android_Json_Parsing - Fatal编程技术网

Android应用程序中JSON文件的解析

Android应用程序中JSON文件的解析,android,json,parsing,Android,Json,Parsing,如何在Android中解析以下字符串 { "C1": { "name": "first name", "address": "first address", "lat": 36.072111, "lng": 34.732112 }, "C2": { "name": "second name", "address": "second address", "lat"

如何在Android中解析以下字符串

{
    "C1": {
        "name": "first name",
        "address": "first address",
        "lat": 36.072111,
        "lng": 34.732112
    },
    "C2": {
        "name": "second name",
        "address": "second address",
        "lat": 32.02132,
        "lng": 34.000002
    },
    "C3": {
        "name": "third name",
        "address": "third address",
        "lat": 37.05435,
        "lng": 34.75703
    }
}

我不明白。它是对象结构中的对象吗?这将如何解析?如何找到我有多少个对象?

您可以使用
JSONObject
提取结构的内容

示例如下所示:

您可以使用从字符串中检索
JSONArray

JSONObject json = new JSONObject(jsonString);
JSONArray myArray = json.getJSONArray(ARRAY_NAME_HERE);
执行此操作后,您可以提取具有

JSONObject person = myArray.getJSONObject(0); // retrieve the first person
String name = person.getString("name"); // get the person's name
参考:


您可以使用
JSONObject
提取结构的内容

示例如下所示:

您可以使用从字符串中检索
JSONArray

JSONObject json = new JSONObject(jsonString);
JSONArray myArray = json.getJSONArray(ARRAY_NAME_HERE);
执行此操作后,您可以提取具有

JSONObject person = myArray.getJSONObject(0); // retrieve the first person
String name = person.getString("name"); // get the person's name
参考:


显示的字符串包含一个外部对象和3个内部对象。假设您想要得到C1.name。您可以这样做:

JSONObject root = new JSONObject(yourString);
JSONObject c1 = root.getJSONObject("C1");
String name = c1.getString("name");
然而,我应该指出另一件事,那就是您使用的原始字符串是奇数的,因为它表明您真正想要的是数组。当然,要解析的代码会有所不同,并且会涉及JSONArray,但我认为更好的表示形式如下所示:

  [
   {"name":"first name","address":"...","lat":"...","lng":"..."},
   {"name":"second name"...},
   {"name":"third name"...}
  ]

因此,在本例中,最外层的容器是一个JSONArray,而不是一个对象。

您显示的字符串包含一个包含3个内部对象的外部对象。假设您想要得到C1.name。您可以这样做:

JSONObject root = new JSONObject(yourString);
JSONObject c1 = root.getJSONObject("C1");
String name = c1.getString("name");
然而,我应该指出另一件事,那就是您使用的原始字符串是奇数的,因为它表明您真正想要的是数组。当然,要解析的代码会有所不同,并且会涉及JSONArray,但我认为更好的表示形式如下所示:

  [
   {"name":"first name","address":"...","lat":"...","lng":"..."},
   {"name":"second name"...},
   {"name":"third name"...}
  ]

所以在本例中,最外层的容器是一个JSONArray,而不是一个对象。

好吧,明白了。解决方案是首先获取内部对象的名称:

JONObject json = new JSONObject(jsonString);
JSONArray namesArray = json.names();
这将为您提供内部现有对象的
JSONArray
。 然后在其对象上运行,以获取每个对象:

for (int i = 0 ; i < namesArray.length() ; i ++)
{
    currentObject = json.getJSONObject(namesArray.get(i).toString());
    Log.d("TAG", "currentObject : "+currentObject.toString());          
    addCurrentObjectShopToObjectsListUsingGson(currentObject,objectsList);
}
for(int i=0;i
好吧,明白了。解决方案是首先获取内部对象的名称:

JONObject json = new JSONObject(jsonString);
JSONArray namesArray = json.names();
这将为您提供内部现有对象的
JSONArray
。 然后在其对象上运行,以获取每个对象:

for (int i = 0 ; i < namesArray.length() ; i ++)
{
    currentObject = json.getJSONObject(namesArray.get(i).toString());
    Log.d("TAG", "currentObject : "+currentObject.toString());          
    addCurrentObjectShopToObjectsListUsingGson(currentObject,objectsList);
}
for(int i=0;i
您需要一个如下所示的“model”对象:(假设散列是静态的)

现在,当使用Gson进行解析时,将cs.class作为类型传递

如果散列不是静态的,您可以(据我所知,Gson将做正确的事情),执行如下操作:

public class TheCs extends BaseModel {
    public List<OneC> someHash;
}
公共类TheCs扩展基本模型{
公开列表;
}
您需要一个如下所示的“model”对象:(假设散列是静态的)

现在,当使用Gson进行解析时,将cs.class作为类型传递

如果散列不是静态的,您可以(据我所知,Gson将做正确的事情),执行如下操作:

public class TheCs extends BaseModel {
    public List<OneC> someHash;
}
公共类TheCs扩展基本模型{
公开列表;
}

使用类或。使用Jackson可以直接将其映射到POJO,这实际上是一个包含三个对象的散列,C1、C2和C3类型为“SomeType”。SomeType有4个字段(名称、地址、纬度、液化天然气)。或者谷歌的Gson()。我正在使用Gson。。。我只是不明白如果有超过C1、C2、C3的对象,我怎么能找到这里的对象数量?你必须理解数组和散列(JSON)之间的区别。是否存在C4?使用类或。使用Jackson可以直接将其映射到POJO,这实际上是一个包含三个对象的散列,C1、C2和C3类型为“SomeType”。SomeType有4个字段(名称、地址、纬度、液化天然气)。或者谷歌的Gson()。我正在使用Gson。。。我只是不明白如果有超过C1、C2、C3的对象,我怎么能找到这里的对象数量?你必须理解数组和散列(JSON)之间的区别。会有C4吗?是的,但是在这种情况下数组的名称是什么?这是不可能的,因为您拥有的JSON不是数组。是的,但是在这种情况下数组的名称是什么?这是不可能的,因为您拥有的JSON不是数组。