什么是JSON?
1. JSON:JavaScript Object Notation;
2. JSON数据是一系列键值对的集合; 轻量级的数据格式,数据都是 String类型。
3. JSON已经被大多数开发人员接受,在网络数据的传输当中应用非常广泛;
4. JSON相对于XML来谟解析稍微方便一些;
JSON VS XML
1.JSON和XML的数据可读性基本相同;
2. JSON和XML同样拥有在写的解析手段;
3. JSON相对于xml来讲,数据体积小;
4. JSON与JavaSript的交互更加方便;
5. JSON对数据的描述性相对较差。
JSON的一个例子:
使用Gson API解析JSON数据的方法
上代码:
MainActivity.java
例二:JSP+servlet 作服务器 生成JSON字符串,客户端解析 JSON数据。
3. JsonTools.java
自动生成构造方法: 右键-->source---->Generate Constructor using Fields...
自动生成 get/set方法: 右键--->source ----> Generate Gettings and Settings....
自动生成 toStinr()的方法: 右键---> source --->Generate toString()....
进行测试
service.getListString()--------> {"persons":["beijing","shanghai","hunan"]}
service.getListMaps()-------->{"persons":[{"id":1001,"address":"beijing","name":"jack"},{"id":1002,"address":"shanghai","name":"rose"}]}
1. JSON:JavaScript Object Notation;
2. JSON数据是一系列键值对的集合; 轻量级的数据格式,数据都是 String类型。
3. JSON已经被大多数开发人员接受,在网络数据的传输当中应用非常广泛;
4. JSON相对于XML来谟解析稍微方便一些;
JSON VS XML
1.JSON和XML的数据可读性基本相同;
2. JSON和XML同样拥有在写的解析手段;
3. JSON相对于xml来讲,数据体积小;
4. JSON与JavaSript的交互更加方便;
5. JSON对数据的描述性相对较差。
JSON的一个例子:
{
"name":"Michael",
"address":
{
"city":"Beijing",
"street":"Chaoyang Road",
"postcode":100025
}
}
一对‘{ }’就是一个JSON对象,可以看到它们可以嵌套。
{
"学生":
[
{"姓名":"小明","年龄":23},
{"姓名":"大憨","年龄":24}
]
}
‘[ ]’ JSON数组。
使用Gson API解析JSON数据的方法
上代码:
MainActivity.java
public class MainActivity extends Activity {
private Button button = null;
private String jsonData = "[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button)findViewById(R.id.buttonId);
button.setOnClickListener(new ButtonListener());
}
private class ButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
JsonUtils jsonUtils = new JsonUtils();
jsonUtils.parseUserFromJson(jsonData);
}
}
}
User.java
package mars.json03;
public class User {
private String name ;
private int age ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
JsonUtils.java
public class JsonUtils {
public void parseUserFromJson(String jsonData){
Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println("name--->" + user.getName());
System.out.println("age---->" + user.getAge());
}
}
}
例二:JSP+servlet 作服务器 生成JSON字符串,客户端解析 JSON数据。
架构如图:
1.建立一个web project.
3. JsonTools.java
public class JsonTools {
public JsonTools() {
}
/**通过key和value,生成JSON格式。
* @param key 表示json字符串的头信息
* @param object 是对解析的集合的类型
* @return
*/
public static String createJsonString(String key, Object value) {
JSONObject jsonObject = new JSONObject();
jsonObject.put(key, value);
return jsonObject.toString();
}
}
4. Person.java
自动生成构造方法: 右键-->source---->Generate Constructor using Fields...
自动生成 get/set方法: 右键--->source ----> Generate Gettings and Settings....
自动生成 toStinr()的方法: 右键---> source --->Generate toString()....
public class Person {
private int id;
private String name;
public Person(int id, String name, String address) {
super();
this.id = id;
this.name = name;
this.address = address;
}
private String address;
public int getId() {
return id;
}
@Override
public String toString() {
return "Person [address=" + address + ", id=" + id + ", name=" + name
+ "]";
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person() {
}
}
5. JsonService.java
public class JsonService {
public JsonService() {
}
public Person getPerson() { //生成一个person对象并赋值
Person person = new Person(1001, "jack", "beijing");
return person;
}
public List<Person> getlistPerson() {//得到一个Person类型的列表
List<Person> list = new ArrayList<Person>();
Person person1 = new Person(1001, "jack", "guangxi");
Person person2 = new Person(1002, "rose", "guangdong");
list.add(person1);
list.add(person2);
return list;
}
public List<String> getListString() { //不用person类,直接用list赋值
List<String> list = new ArrayList<String>();
list.add("beijing");
list.add("shanghai");
list.add("hunan");
return list;
}
public List<Map<String, Object>> getListMaps() {//运用Map来传递值
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("id", 1001);
map1.put("name", "jack");
map1.put("address", "beijing");
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("id", 1002);
map2.put("name", "rose");
map2.put("address", "shanghai");
list.add(map1);
list.add(map2);
return list;
}
}
6. TestJson.java
进行测试
public class TestJson {
public TestJson() {
}
/**
* @param args
*/
public static void main(String[] args) {
String msg = "";
JsonService service = new JsonService();
// // Person person = service.getPerson();
// // msg = JsonTools.createJsonString("person", person);
// // System.out.println(msg);
msg = JsonTools.createJsonString("persons", service.getListMaps());
System.out.println(msg);
}
}
结束分别为:service.getlistPerson() ----> {"persons":[{"address":"guangxi","id":1001,"name":"jack"},{"address":"guangdong","id":1002,"name":"rose"}]}
service.getListString()--------> {"persons":["beijing","shanghai","hunan"]}
service.getListMaps()-------->{"persons":[{"id":1001,"address":"beijing","name":"jack"},{"id":1002,"address":"shanghai","name":"rose"}]}
7. 客户端 JSON数据提取时,做下扩充
JDBC:把数据从数据库中提取出来,是单条记录或某个集合,服务器需要把这些数据生成JSON格式,在客户端就可以去解析这些数据,放在手机上显示出来。
我们把这方法放在一个Servlet中。JsonServlet.java:
@WebServlet("/JsonServlet")
public class JsonServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private JsonService service;
public JsonServlet() {
super();
}
@Override
public void destroy() {
super.destroy();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String jsonString = "";
// 1. jsonString = JsonTools.createJsonString("person", service.getPerson());
String action_flag = request.getParameter("action_flag");
if (action_flag.equals("person")) {
jsonString = JsonTools.createJsonString("person", service
.getPerson());
} else if (action_flag.equals("persons")) {
jsonString = JsonTools.createJsonString("persons", service
.getlistPerson());
} else if (action_flag.equals("liststring")) {
jsonString = JsonTools.createJsonString("liststring", service
.getListString());
} else if (action_flag.equals("listmap")) {
jsonString = JsonTools.createJsonString("listmap", service
.getListMaps());
}
out.println(jsonString);
out.flush();
out.close();
}
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
service = new JsonService();
}
}
第一种,在浏览器中输入:http://192.168.0.221:8080/jsonProject/JsonServlet,就可得到JSON数据:{"address":"beijing","id":1001,"name":"jack"}}。
多种情况的代码的访问方式:http://192.168.0.221:8080/jsonProject/JsonServlet?action_flag=liststring ;改变这个action_flag就可以得到不同的数据。