Json(JavaScript Object Notation)是一种轻量级的数据交换格式。用于数据传输,通用于PHP,Java,C++,C#,Python等编程语言数据交换传输。
Google为我们提供了Gson解析库可以将一个JSON字符串转成一个Java对象,或者反过来。将Gson.jar包放在libs中,Add as Library,这里还用到了Volley库进行网络通信。示例:
1 package com.zhang.gsondemo.bean; 2 3 4 5 import java.util.ArrayList; 6 7 /** 8 * Created by Mr.Z on 2016/10/7 0007. 9 */ 10 11 public class Book { 12 private String title; 13 private String publisher; 14 private String summary; 15 private ArrayList<Tag> tags; 16 17 public String getTitle() { 18 return title; 19 } 20 21 public void setTitle(String title) { 22 this.title = title; 23 } 24 25 public String getPublisher() { 26 return publisher; 27 } 28 29 public void setPublisher(String publisher) { 30 this.publisher = publisher; 31 } 32 33 public String getSummary() { 34 return summary; 35 } 36 37 public void setSummary(String summary) { 38 this.summary = summary; 39 } 40 41 public ArrayList<Tag> getTags() { 42 return tags; 43 } 44 45 public void setTags(ArrayList<Tag> tags) { 46 this.tags = tags; 47 } 48 }
1 package com.zhang.gsondemo.bean; 2 3 /** 4 * Created by Mr.Z on 2016/10/7 0007. 5 */ 6 7 public class Tag { 8 private String count; 9 private String name; 10 private String title; 11 12 public String getCount() { 13 return count; 14 } 15 16 public void setCount(String count) { 17 this.count = count; 18 } 19 20 public String getName() { 21 return name; 22 } 23 24 public void setName(String name) { 25 this.name = name; 26 } 27 28 public String getTitle() { 29 return title; 30 } 31 32 public void setTitle(String title) { 33 this.title = title; 34 } 35 }
1 package com.zhang.gsondemo; 2 3 import android.os.Bundle; 4 import android.support.v7.app.AppCompatActivity; 5 import android.util.Log; 6 7 import com.android.volley.Response; 8 import com.android.volley.VolleyError; 9 import com.android.volley.toolbox.StringRequest; 10 import com.android.volley.toolbox.Volley; 11 import com.google.gson.Gson; 12 import com.zhang.gsondemo.bean.Book; 13 import com.zhang.gsondemo.bean.Tag; 14 15 16 import java.util.ArrayList; 17 18 public class MainActivity extends AppCompatActivity { 19 20 private String url = "https://api.douban.com/v2/book/1220562"; 21 22 @Override 23 protected void onCreate(Bundle savedInstanceState) { 24 super.onCreate(savedInstanceState); 25 setContentView(R.layout.activity_main); 26 27 getData(); 28 } 29 30 private void getData() { 31 StringRequest request = new StringRequest(url, 32 new Response.Listener<String>() { 33 @Override 34 public void onResponse(String s) { 35 Log.i("info", s); 36 dealData(s); 37 } 38 }, 39 new Response.ErrorListener() { 40 @Override 41 public void onErrorResponse(VolleyError volleyError) { 42 43 } 44 }); 45 46 Volley.newRequestQueue(this).add(request); 47 } 48 49 private void dealData(String s) { 50 Gson gson = new Gson(); 51 Book book = gson.fromJson(s, Book.class); 52 Log.i("info", book.getTitle() + "----" + book.getPublisher() + "----" + book.getTags().size()); 53 ArrayList<com.zhang.gsondemo.bean.Tag> tags = book.getTags(); 54 for (com.zhang.gsondemo.bean.Tag tag:tags){ 55 System.out.println(tag.getTitle()); 56 } 57 58 59 } 60 61 62 }
阿里巴巴的工程师封装了一个Fast-json的解析库,用起来也很方便 ,官方介绍比其他任何基于Java的解析器和生成器更快,更强大。Java对象同上:
1 package com.zhang.fastjsondemo; 2 3 import android.os.Bundle; 4 import android.support.v7.app.AppCompatActivity; 5 import android.util.Log; 6 7 import com.alibaba.fastjson.JSON; 8 import com.android.volley.Response; 9 import com.android.volley.VolleyError; 10 import com.android.volley.toolbox.StringRequest; 11 import com.android.volley.toolbox.Volley; 12 import com.zhang.fastjsondemo.bean.Book; 13 14 public class MainActivity extends AppCompatActivity { 15 16 private String url = "https://api.douban.com/v2/book/1220562"; 17 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_main); 22 23 getData(); 24 } 25 26 private void getData() { 27 StringRequest request = new StringRequest(url, 28 new Response.Listener<String>() { 29 @Override 30 public void onResponse(String s) { 31 Log.i("info", s); 32 dealData(s); 33 } 34 }, 35 new Response.ErrorListener() { 36 @Override 37 public void onErrorResponse(VolleyError volleyError) { 38 39 } 40 }); 41 42 Volley.newRequestQueue(this).add(request); 43 } 44 45 private void dealData(String s) { 46 Book book = JSON.parseObject(s, Book.class); 47 Log.i("info", book.getTitle() + "----" + book.getPublisher() + "----" + book.getTags().size()); 48 49 // 50 // //读取多条json 51 // List<Book> books = JSON.parseObject(s, new TypeReference<List<Book>>() { 52 // }); 53 // 54 // //集合转化成json 55 // Book book1 = new Book(); 56 // book1.setTitle("biaoti1"); 57 // Book book2 = new Book(); 58 // book2.setTitle("biaoti2"); 59 // Book book3 = new Book(); 60 // book3.setTitle("biaoti3"); 61 // 62 // List<Book> list = new ArrayList<Book>(); 63 // list.add(book1); 64 // list.add(book2); 65 // list.add(book3); 66 // JSON.toJSON(list); 67 } 68 }