对JSON格式数据的操作和解析和创建
JSON简介:
JSON是JavaScript Object Notation的简写,JSON是一种轻量级的数据交换格式,其基于JavaScript的一个子集。JSON采用独立于程序语言的的文本格式,但类似于C语言家族。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(网络传输速度)。
JSON的语法规则:
数据的一半格式是 “名称”:”值” 这种组合中名称和键值对按照先后顺序排放在双引号中,并在中间用冒号隔开例如 ”fristname”:”json其中的键值对可以包括以下类型:
1. 数字 (整数或浮点数)
2. 字符串(在双引号中)
3. 逻辑值(true或 false)
4. 数组 (在方括号中)
5. 对象 (在花括号中)
6. Null
同时:
1. 数据不止一个时用逗号分隔
2. 对象由花括号保存
3. 数组有方括号保存
4. 结束不需要分号
一个JSON格式的文本的例子
{
"languages":[
{"ID":1,"IDE":"Eclipse","Name":"Java"},
{"ID":2,"IDE":"Xcode","Name":"Swift"},
{"ID":3,"IDE":"VisualStudio","Name":"C#"}
]
}
其中对最外围有一对花括号,表示这是一个JSON格式的数据对象,其中的名字为,languages,之后的键值对中是一个方括号,表示这是一个数组,数组中又包括三个对象,每个对象都包含三个 名称/键值 对数据 分别是ID IDE 以及Name和与其对应的值。
由此看来
JSON的结构有两种(摘自百度百科):
1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了
JSON数据的访问
Development={
"languages":[
{"ID":1,"IDE":"Eclipse","Name":"Java"},
{"ID":2,"IDE":"Xcode","Name":"Swift"},
{"ID":3,"IDE":"VisualStudio","Name":"C#"}
],
“programmer”:[
{“name”:”alex”,”address”:”U.S”}
{“name”:”bob”,”address”:”France”}
]
}
以以上代码为例:
Development.languages[1].IDE 对应的便是Xcode
Development.programmer[0].name 对应的便是alex
对JSON格式的数据的操作另付代码:
package com.example.test_json;
import java.io.*;
import org.json.*;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try{
InputStreamReader isr=newInputStreamReader(getAssets().open("test.JSON"),"UTF-8");
BufferedReader br=newBufferedReader(isr);
String line;
StringBuilder builder=new StringBuilder();
while((line=br.readLine())!=null){
builder.append(line);
}
br.close();
isr.close();
JSONObject root=newJSONObject(builder.toString());
//System.out.println("Cat"+root.getString("CAT"));
JSONArray array=root.getJSONArray("languages");
for(int i=0;i<array.length();i++){
JSONObjectlan=array.getJSONObject(i);
System.out.println("----------------");
System.out.println("ID="+lan.getInt("ID"));
System.out.println("IDE="+lan.getString("IDE"));
System.out.println("NAME="+lan.getString("Name"));
}
}
catch(UnsupportedEncodingException e){
e.printStackTrace();
}
catch(IOExceptione){
e.printStackTrace();
}
catch(JSONException e){
e.printStackTrace();
}
}
}
JSON格式的文件的创建
以此段代码为例通过注释说明
try{ //捕获可能的异常
JSONObject root=new JSONObject(); //创建一个JSONObject对象root
root.put("cat", "it"); //root中加入第一个键值对
JSONObject lan1=newJSONObject(); //同时创建三个JSONObject对象
JSONObject lan2=newJSONObject();
JSONObject lan3=newJSONObject();
lan1.put("id", 1);
lan1.put("ide","eclipse"); //往三个对象中加入对应的 名称/键值对
lan1.put("name","java");
lan2.put("id", 2);
lan2.put("ide","visualstdio");
lan2.put("name","c#");
lan3.put("id", 3);
lan3.put("ide","Xcode");
lan3.put("name","swift");
JSONArray array=new JSONArray(); //创建一个JSON格式的数组,将三个对象放入
array.put(lan1);
array.put(lan2);
array.put(lan3);
root.put("langauages", array); //再将这个数组作为键值对传入
System.out.println(root.toString());
}
catch (Exception e) {
e.printStackTrace();
}
}
最终创建的JSON文件的内容是
{
"languages":[
{"ID":1,"IDE":"Eclipse","Name":"Java"},
{"ID":2,"IDE":"Xcode","Name":"Swift"},
{"ID":3,"IDE":"VisualStudio","Name":"C#"}
],
“cat”:“it”
]
}
最后附上一个在线测试JSON格式的网址:
http://www.bejson.com/