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

时间:2013-10-25 00:11:29

标签: 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": 32.02132,
        "lng": 34.000002
    },
    "C3": {
        "name": "third name",
        "address": "third address",
        "lat": 37.05435,
        "lng": 34.75703
    }
}

我无法理解。它是对象结构中的对象吗?怎么解析?如何找到我有多少个物体?

4 个答案:

答案 0 :(得分:3)

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

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);
}

答案 1 :(得分:1)

您可以使用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

参考:

http://developer.android.com/reference/org/json/JSONObject.html

答案 2 :(得分:0)

您显示的字符串包含一个包含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 :(得分:0)

你需要一个看起来像这样的“模型”对象:(如果散列是静态的)。

public class TheCs extends BaseModel {
    public OneC c1;
    public OneC c2;
    public OneC c3;
}

public class OneC extends BaseModel {
    public String name;
    public String address;
    public float lat, lng;
}

public class BaseModel implements Serializable {
    private static final long serialVersionUID = 1L;//use a random number here
}

现在用Gson解析时,将TheCs.class作为类型传递。

如果Hash不是静态的,你可以(并且Gson会尽我所能做正确的事情),做类似的事情:

public class TheCs extends BaseModel {
    public List<OneC> someHash;
}