layout: post title: “Gson的动态解析json” subtitle: “Welcome to my blog “ date: 2017-02-16 15:32:00 author: “Lazy” header-img: “img/home-bg-o.jpg” header-mask: 0.3 catalog: true tags: - Android - Gson —
##看json
{li:{"temperature":"15","weather":"多云转晴","wind":"东北风微风","week":"星期日","date":"20151011"}}
##当你遇到其中date要是后面跟的类型多变怎么办呢?还要写一个解析类?不用
/**
* 项目名称:Demo1
* 类描述:
* 创建人:Administrator
* 创建时间:2017/2/16 14:54
* 修改人:Administrator
* 修改时间:2017/2/16 14:54
* 修改备注:
* 联系方式:906514731@qq.com
*/
public class TestEnty {
Map<String,Object> li;
}
package com.Company.Demo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.google.gson.Gson;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private String json = "{li:{\"temperature\":\"15\",\"weather\":\"多云转晴\",\"wind\":\"东北风微风\",\"week\":\"星期日\",\"date\":\"20151011\"}}";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Gson gson = new Gson();
TestEnty testEnty = gson.fromJson(json, TestEnty.class);
Map<String, Object> li = testEnty.li;
for (String key : li.keySet()) { //遍历取出key,再遍历map取出value。
Log.e("key", key);
Log.e("li.get(key).toString()", li.get(key).toString());
}
}
}
这个取出的类型自己去判断什么类型然后转成自己需要的类型就行啦!
##如果是多层嵌套呢?
public class MainActivity extends AppCompatActivity {
private String json = "{\n"
+ " \"data\": {\n"
+ " \"noofCity\": \"1\",\n"
+ "\n"
+ "\n"
+ " \"City 1\": [\n"
+ " {\n"
+ " \"id\": \"12\",\n"
+ " \"title\": \"Delhi\"\n"
+ " }\n"
+ " ]\n"
+ " },\n"
+ " \"success\": true\n"
+ "}";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test();
}
/**
* 测试
*/
private void test() {
Gson gson = new Gson();
TestEnty testEnty = gson.fromJson(json, TestEnty.class);
Map<String, Object> li = testEnty.data;
for (String key : li.keySet()) { //遍历取出key,再遍历map取出value。
if ((li.get(key)) instanceof ArrayList) {
for (int i = 0; i < ((ArrayList) li.get(key)).size(); i++) {
Object o = ((ArrayList) li.get(key)).get(i);
if (o instanceof LinkedTreeMap) {
for (String va : ((LinkedTreeMap<String, Object>) o).keySet()) {
Log.e("test", "key==" + va + " value=" + ((LinkedTreeMap<String, Object>) o).get(va)
.toString());
}
} else {
Log.e("test", "key==" + key + " value=" + ((ArrayList) li.get(key)).get(i));
}
}
} else {
Log.e("test", "key==" + key + " value=" + li.get(key).toString());
}
}
}
}