如何解析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
}
}
我无法理解。它是对象结构中的对象吗?怎么解析?如何找到我有多少个物体?
答案 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;
}