json理解及使用
来源:互联网 发布:php array 转 object 编辑:程序博客网 时间:2024/06/14 02:18
开发中对待数据处理时,往往用到json.类似于
{"employees": [{ "name":"Bill.Gates" ,"age":18,"sex":0},{ "name":"Taylor.Swift" ,"age":18,"sex":1},{ "name":"Thomas.Carter","age":18,"sex":0}]}
这样的数据结构,服务器端或者客户端需要解析或者构建这样的数据。那么,json到底是什么鬼?
官方描述:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
也就是说,原本它是JavaScript的一种对象表示法,但是它独立于语言,即可以在多种语言中使用;它是一种数据交换方式(或者称之为数据交流更合适)。因为它具有易于机器理解生成和人的阅读编写,结构清晰,使用方便,故在多种语言中作为经常使用的数据结构。
JSON建构于两种结构(即对象和数组):
“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash
table),有键列表(keyed list),或者关联数组 (associative array)。值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
字符串(string)与C或者Java的字符串非常相似。
数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
JSON 语法规则 JSON 语法:
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
光说不练,等于扯淡。
以json在Android中使用为例实践。
比如 需要这样的数据形式
{ "flag": true, "data": [ { "name": "zhangsan", "uid": "00022" }, { "name": "lisi", "uid": "00023" }, { "name": "wangwu", "uid": "00024" }, { "name": "maliu", "uid": "00025" }, { "name": "maya", "uid": "00080" } ]}
如果是Android端如何构建这样的数据呢?
我们用到jsonarray jsonobject
jsonarray 表示json数组
jsonobject 表示json对象
JSONArray jsonarray = new JSONArray();
jsonarray.put(“zhangsan”);
那么显示的是[“zhangsan”],即内容为”zhangsan”的数组
JSONObject obj = new JSONObject();
object.put(“李四”);
那么显示的是{“李四”},即内容为”李四”的对象
所以通过分析我们得出需要组织的数据结构
外层是一个对象 {}
对象中 2类数据,一个普通键值对 “flag”: true,一个职位数组的键值对 :
“data”: [
{
“name”: “zhangsan”,
“uid”: “00022”
},
{
“name”: “lisi”,
“uid”: “00023”
},
{
“name”: “wangwu”,
“uid”: “00024”
},
{
“name”: “maliu”,
“uid”: “00025”
},
{
“name”: “maya”,
“uid”: “00080”
}
]
此时数组中有6个对象
分析到此构建我们就心中有数了
首先我们需要建一个People类
public class People implements Serializable {String name;String uid;public String getName() { return name;}public void setName(String name) { this.name = name;}public String getUid() { return uid;}public void setUid(String uid) { this.uid = uid;}
}
把数据先放入数组
String[] name = {"zhangsan", "lisi", "wangwu", "maliu", "maya"};String[] uid = {"00022", "00023", "00024", "00025", "00080"};
放入list
List<People> pList = new ArrayList<>();for (int i = 0; i < name.length; i++) { People p = new People(); p.setUid(uid[i]); p.setName(name[i]); pList.add(p); }//建jsonarray jsonobject 对象JSONArray jsonarray = new JSONArray();JSONObject j = null;//循环放入数据到jsonarray try { for (int i = 0; i < pList.size(); i++) { JSONObject object = new JSONObject(); object.put("name", pList.get(i).getName()); object.put("uid", pList.get(i).getUid()); jsonarray.put(object); }//拼出需要的格式 j = new JSONObject(); j.put("flag", true); j.put("data", jsonarray); Log.i("Json", j.toString()); } catch (JSONException e) { e.printStackTrace(); }
怎么解析数据呢?刚才的分析逆推就是了
//解析json
List parseData(String mData) {
List<People> pList = new ArrayList<>(); try { JSONObject obj = new JSONObject(mData); flag = obj.optBoolean("flag"); JSONArray jary = obj.optJSONArray("data"); for (int j = 0; j < jary.length(); j++) { JSONObject jt = jary.getJSONObject(j); String name = jt.optString("name"); String uid = jt.optString("uid"); People people = new People(); people.setName(name); people.setUid(uid); pList.add(people); } } catch (JSONException e) { e.printStackTrace(); } return pList;}
android 完整代码:
public class MainActivity extends AppCompatActivity { boolean flag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String str = createJsonData(); List<People> plt = parseData(str); StringBuffer sb = new StringBuffer(); for (int i = 0; i < plt.size(); i++) { sb =sb.append("第"+i+"项:"+plt.get(i).getName()+"、").append(plt.get(i).getUid()+"\n"); } TextView tv = (TextView) findViewById(R.id.tv); tv.setText(sb.toString()); } //组装json String createJsonData() { String[] name = {"zhangsan", "lisi", "wangwu", "maliu", "maya"}; String[] uid = {"00022", "00023", "00024", "00025", "00080"}; List<People> pList = new ArrayList<>(); for (int i = 0; i < name.length; i++) { People p = new People(); p.setUid(uid[i]); p.setName(name[i]); pList.add(p); } JSONArray jsonarray = new JSONArray(); JSONObject j = null; try { for (int i = 0; i < pList.size(); i++) { JSONObject object = new JSONObject(); object.put("name", pList.get(i).getName()); object.put("uid", pList.get(i).getUid()); jsonarray.put(object); } j = new JSONObject(); j.put("flag", true); j.put("data", jsonarray); Log.i("Json", j.toString()); } catch (JSONException e) { e.printStackTrace(); } return j.toString(); } //解析json List<People> parseData(String mData) { List<People> pList = new ArrayList<>(); try { JSONObject obj = new JSONObject(mData); flag = obj.optBoolean("flag"); JSONArray jary = obj.optJSONArray("data"); for (int j = 0; j < jary.length(); j++) { JSONObject jt = jary.getJSONObject(j); String name = jt.optString("name"); String uid = jt.optString("uid"); People people = new People(); people.setName(name); people.setUid(uid); pList.add(people); } } catch (JSONException e) { e.printStackTrace(); } return pList; }}
- json理解及使用
- JSON的理解使用
- JSON简介及使用
- JSON介绍及使用
- JSON简介及使用
- JSON语法及使用
- 理解HashSet及使用
- 理解HashSet及使用
- 理解及使用adb
- json.js原文及使用
- json 格式解析 及使用
- ajax编码及JSON使用
- Json简介及fastJson使用
- 在json中JSON.parse()和JSON.stringify()及 jQuery.parseJSON( json )的理解
- JSON 之我的理解跟使用
- JSON.stringify的理解和使用
- MyBatis缓存使用及理解
- JDK Keytool 使用及理解
- 第十四周 二叉树排序树中查找的路径
- 关于生命周期不得不说的事儿
- 第13周项目4-Floyd算法的验证
- 微信接入探秘(一)——从零认识微信接口
- python库安装通用教程
- json理解及使用
- Java文件下载的几种方式
- android开发之旅(二)
- 运行时异常一般异常的区别
- 阻塞
- 【IDE-Visual Studio】Command line error D8016
- OCR tesseract中文无法识别问题
- TensorFlow实验环境搭建
- win7 mysql的安装和常见问题解决