您的位置:首页 > 移动开发 > Android开发

android 解析JSON

2015-12-11 16:42 423 查看
JSON :一种轻量级的数据交换格式。

JSON建构的两种格式:

1:”名称/值 “对的集合

2:值得有序列表(数组)

格式示例如下:

{

"user": [

{

"firstName": "Wang",

"lastName": "Yo",

"email": "44393xxx@qq.com"

},

{

"firstName": "Yang",

"lastName": "Gen",

"email": "256472xxx@qq.com"

}

]

}

解析JSON有多中方式 可以使用JsonReader解析,JSONReader 是android.untl包下的一个用于解析JSON的工具类,最低版要求是API11.

常用方法如下:

//创建JsonReader 对象

    JsonReader reader = new JsonReader(new StringReader(jsonData));

    //开始解析数组

    reader.beginArray();

    //循环判断有没有下一个Json对象

    while(reader.hasNext()){

    //开始解析Json对象

    reader.beginObject();

    }

    //循环判断Json对象里面有没有下一个键值对

    while(reader.hasNext()){

    String tagName = reader.nextName();

    if(tagName.equal("name")){

    //name键多对应的值

    reader.nextString();

    }else if(tagName.equal("age")){

    //age键多对应的值

    reader.nextString();

    }

    }

    //Json对象的结尾

    reader.endObject();

    }

    //数组解析的结尾

    reader.endArray();

示例如下:

1:创建一个json数据该文件存放于 (res/ raw/person.json)

2:创建一个person类,包含上面xml中的属性生成toString方法即可

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public void JSON_Click(View view) {

ArrayList<Person> list = JsonReaders();

for (int i = 0; i < list.size(); i++) {

System.out.println(list.get(i));

}

}

private ArrayList<Person> JsonReaders() {

ArrayList<Person> list = new ArrayList<>();

Reader r = new InputStreamReader(getResources().openRawResource(R.raw.person));

JsonReader jr = new JsonReader(r);

try {

jr.beginObject();// 解析对象

if(jr.hasNext()){

if ("user".equals(jr.nextName())){

jr.beginArray();// 解析数组

while(jr.hasNext()){// 循环判断有没有下一个JSON对象

Person p = new Person();

jr.beginObject();

while (jr.hasNext()){

String name =jr.nextName();

if ("firstName".equals(name)){

p.firstName=jr.nextString();

}else if ("lastName".equals(name)){

p.lastName=jr.nextString();

}else if ("email".equals(name)){

p.email=jr.nextString();

}

}

jr.endObject();// JSON对象的结尾

list.add(p);

}

jr.endArray();// 数组解析的结尾

}

}

jr.endObject();

} catch (IOException e) {

e.printStackTrace();

}

return list;

}

运行至模拟器,在控制台即可看到响应的数据,

---------------------------------------------------------------------------------------------------------------------------------

通过对象生成JSON数据

// 生成JSON数据

public void create_JSON(View view) {

ArrayList<Person> list = new ArrayList<>();

Person p1 = new Person();

p1.firstName = "Wang";

p1.lastName = "Yon";

p1.email = "44393xxx@qq.com";

Person p2 = new Person();

p2.firstName = "Yang";

p2.lastName = "Gen";

p2.email = "256472xxx@qq.com";

list.add(p1);

list.add(p2);

JSONObject json = new JSONObject();

JSONArray array = new JSONArray();

try {

for (int i = 0; i < list.size(); i++) {

Person p = list.get(i);

JSONObject obj = new JSONObject();

//将对象假如JSONObject中

obj.put("firstName", p.firstName);

obj.put("lastName", p.lastName);

obj.put("email", p.email);

array.put(obj);

}

json.put("person", array);

} catch (JSONException e) {

e.printStackTrace();

}

System.out.println(json.toString() );

}

-------------------------------------------------------------------------------------------------------------------------------

使用GSON解析JSON

谷歌为了方便解析JSON 数据,因此引入了GSON类库,可以吧java对象转化成JSON,也可以吧JSON转换为java对象且使用非常方便。

使用的时候应先导入响应的jar包。

1:json数据如下:

[

{

"firstName": "Wang",

"lastName": "Yo",

"email": "44393xxx@qq.com"

},

{

"firstName": "Yang",

"lastName": "Gen",

"email": "256472xxx@qq.com"

}

]

// 解析代码

{

Gson gson= new Gson();

Reader r = new InputStreamReader(getResources().openRawResource(R.raw.person));

Type type= new TypeToken<ArrayList<Person>>(){}.getType();

ArrayList<Person> list =gson.fromJson(r, type);

for (int i = 0 ; i <list.size();i++){

System.out.println(list.get(i));

}

}

---------------------------------------------------------------------------------------------------------------------------------

通过对象生成JSON数据

ArrayList<Person> list = new ArrayList<>();

Person p1 = new Person();

p1.firstName = "Wang";

p1.lastName = "Yong";

p1.email = "44393xxx@qq.com";

Person p2 = new Person();

p2.firstName = "Yang";

p2.lastName = "Gen";

p2.email = "2564725xxx@qq.com";

list.add(p1);

list.add(p2);

Gson gson= new Gson();

Type type= new TypeToken<ArrayList<Person>>(){}.getType();

String json= gson.toJson(list, type);

System.out.println(json);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: