解析JSON
- 什么是JSON?
- JSON的基本形式
- 前端解析JSON
- Java解析JSON
- fastjson方式
- android-json方式
- json-lib方式
- Map,Bean -> JSON
- fastjson
- json-lib
什么是JSON?
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,而且它是基于JavaScript的。
JSON 文件的文件类型是 .json,JSON 文本的 MIME 类型是 application/json
JSON的基本形式
{} 双括号表示对象:对象是一个无序的 “名/值” 对的集合(A collection of name/value pairs),一个对象以 “{” 开始,“}” 结束,每个名称后跟一个":",“名/值”对之间使用“,” 分隔。
[] 中括号表示数组:值的有序列表(An ordered list of values),一个数组以“[”开始,“]”结束,值之间使用“,”分隔。
"" 双引号内是属性或值,值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
实例
-- 对象 {"name":"小明","age":"18"} -- 数组 [{"name":"小明","age":"18"},{"name":"小红","age":"19"}] -- 嵌套 {"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"}} { "value":"200", "data":{"msg":"ssssss","name":"xxxxxx"}, "result":[ {"name":"小明","age":"18"}, {"name":"小红","age":"19"} ] }
前端解析JSON
JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的 API 或工具包。
客户端处理JSON响应
服务器端返回JSON相应的文本表示,如:
{ "name":"小明", "age":"18" }
客户端使用eval()函数将JSON文本转化为JavaScript对象:
Java解析JSON
fastjson方式
使用fastjson-x.x.xx.jar,对于方法中根据key获取value时,要注意判断null。
方法 | 返回值 | 含义 |
---|---|---|
JSON.parseObject(Strign str) | JSONObject对象 | 将json字符串转换为对象 |
JSONObject对象.getString(“xxx”) | 返回value值 | 获取对象中的值 如果没有指定的key,则返回null |
JSONObject对象.getJSONArray(“xxx”) | 返回一个JSONArray数组,包含多个JSON对象 | 获取array,需要循环获取数据 不存在则返回null |
import java.util.Map; // fastjson-1.2.51.jar import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class AnalysisFirst { public static void format1() { String jsonStr = "{"key":"小红","value":"18"}"; JSONObject jsonObject = JSON.parseObject(jsonStr); String key = jsonObject.getString("key"); String value = jsonObject.getString("value"); System.out.println(jsonStr); // {"key":"小红","value":"18"} System.out.println(key + " " + value); // 小红 18 } public static void format2() { String jsonStr = "{"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"},"des":{"id":"1","info":"信息"}}"; System.out.println(jsonStr); // {"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"},"des":{"id":"1","info":"信息"}} JSONObject jsonObject = JSON.parseObject(jsonStr); System.out.println(jsonObject.getString("code")); // 200 System.out.println(jsonObject.getString("msg")); // 成功 JSONObject dataObject = JSON.parseObject(jsonObject.getString("data")); System.out.println(dataObject.getString("msg")); // ssssss // 在获取时需要先判断是否为null,避免出现异常 System.out.println(dataObject.getString("msg1") == null); // true System.out.println(JSON.parseObject(jsonObject.getString("des")).getString("info")); } public static void format3() { String jsonStr = "{"value":"200","data":{"msg":"ssssss","name":"xxxxxx"},"result":[{"name":"小明","age":"18"},{"name":"小红","age":"19"}]}"; System.out.println(jsonStr); JSONObject jsonObject = JSON.parseObject(jsonStr); for (Object info : jsonObject.getJSONArray("result")) { // 一条具体的json数据 JSONObject object = (JSONObject)info; if(object.get("name") != null){ System.out.println(object.get("name").toString()); System.out.println(object.getString("name")); } } } public static void format4() { String jsonStr = "[{"name":"小明","age":"18"},{"name":"小红","age":"19"}]"; System.out.println(jsonStr); // 方式一:直接作为JSONArray -> map JSONArray jsonArray = JSONArray.parseArray(jsonStr); if(null != jsonArray && !jsonArray.isEmpty()) { for(int i=0; iMap map = (Map)jsonArray.get(i); System.out.println(map.get("name")); } } // 方式二 for (Object info : JSONArray.parseArray(jsonStr)) { // 一条具体的json数据 JSONObject object = (JSONObject)info; if(object.get("age") != null){ System.out.println(object.getString("age")); } } } // 将json解析为JavaBean对象 public static void toJavaBean() { String str = "{"name":"小明","age":"18"}"; System.out.println(str); Student student = new Student(); try { student = JSON.parseObject(str, Student.class); } catch (Exception e) { e.printStackTrace(); } System.out.println(student.toString()); } }
android-json方式
最原始的解析方式,了解即可。
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.alibaba.fastjson.JSON; public class AnalysisSecond { public static void format1() { String jsonStr = "{"key":"小红","value":"18"}"; JSONObject jsonObject; try { jsonObject = new JSONObject(jsonStr); String key = jsonObject.getString("key"); String value = jsonObject.getString("value"); System.out.println(jsonStr); // {"key":"小红","value":"18"} System.out.println(key + " " + value); // 小红 18 } catch (JSONException e) { e.printStackTrace(); } } public static void format2() { String jsonStr = "{"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"},"des":{"id":"1","info":"信息"}}"; System.out.println(jsonStr); // {"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"},"des":{"id":"1","info":"信息"}} JSONObject jsonObject; try { jsonObject = new JSONObject(jsonStr); System.out.println(jsonObject.getString("code")); // 200 System.out.println(jsonObject.getString("msg")); // 成功 JSONObject dataObject = new JSONObject(jsonObject.getString("data")); System.out.println(dataObject.getString("msg")); // ssssss // 在获取时需要先判断是否为null,避免出现异常 System.out.println(dataObject.getString("msg1") == null); // true System.out.println(JSON.parseObject(jsonObject.getString("des")).getString("info")); } catch (JSONException e) { e.printStackTrace(); } } public static void format3() { String jsonStr = "{"value":"200","data":{"msg":"ssssss","name":"xxxxxx"},"result":[{"name":"小明","age":"18"},{"name":"小红","age":"19"}]}"; System.out.println(jsonStr); JSONObject jsonObject; try { jsonObject = new JSONObject(jsonStr); // 返回json的数组 JSONArray jsonArray = jsonObject.getJSONArray("result"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject object = jsonArray.getJSONObject(i); if (object.get("name") != null) { System.out.println(object.get("name").toString()); System.out.println(object.getString("name")); } } } catch (JSONException e) { e.printStackTrace(); } } }
json-lib方式
使用json-lib-2.4.jar
import java.util.Map; // json-lib-2.4.jar import net.sf.json.JSONObject; public class JsonTool { public static void main(String[] args) { String jsonStr = "{"key":"小红","value":"18"}"; JSONObject jsonObject = JSONObject.fromObject(jsonStr); String key = jsonObject.getString("key"); String value = jsonObject.getString("value"); System.out.println(jsonObject);// {"key":"小红","value":"18"} System.out.println(key + " " + value);// 小红 18 // 将 Json转换为 Map MapjsonToMap = (Map ) JSONObject.toBean(jsonObject, Map.class); System.out.println("将 Json转换为 Map:"+jsonToMap);// 将Json转换为 Map:{value=18, key=小红} // 将 Json转换为 JavaBean jsonStr = "{"name":"小李","age":"18"}"; JSONObject jsonObject1 = JSONObject.fromObject(jsonStr); Student jsonToBean = (Student) JSONObject.toBean(jsonObject1, Student.class); System.out.println(jsonToBean.getName()+jsonToBean.getAge());// 小李18 } }
Map,Bean -> JSON
fastjson
使用fastjson-x.x.xx.jar
import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSONObject; public class ToJson { public static void main(String[] args) { // 将Map解析成JSON Mapmap = new HashMap (); map.put("1", "add"); map.put("2", "del"); map.put("3", 520); JSONObject jsonMap = new JSONObject(map); System.out.println("map:"+map);// map:{1=add, 2=del, 3=520} System.out.println("JSON:"+jsonMap);// JSON:{"1":"add","2":"del","3":520} } }
json-lib
使用json-lib-2.4.jar
import java.util.HashMap; import java.util.Map; // json-lib-2.4.jar import net.sf.json.JSONObject; public class ToJson { public static void main(String[] args) { // 将Map解析成JSON Mapmap = new HashMap (); map.put("1", "add"); map.put("2", "del"); map.put("3", 520); JSONObject jsonMap = JSONObject.fromObject(map); System.out.println("map:"+map);// map:{3=520, 2=del, 1=add} System.out.println("JSON:"+jsonMap);// JSON:{"3":520,"2":"del","1":"add"} // 将Bean解析成JSON Student student = new Student("小红","18"); JSONObject jsonBean = JSONObject.fromObject(student); System.out.println(jsonBean);// {"age":"18","name":"小红"} // 嵌套解析成JSON Map tempMap = new HashMap (); tempMap.put("班级", "1班"); tempMap.put("学生", student); JSONObject json = JSONObject.fromObject(tempMap); System.out.println(tempMap); // {学生=test.constant.json.Student@158c4d4c, 班级=1班} System.out.println(json); // {"学生":{"age":18,"name":"小红"},"班级":"1班"} } }