Json学习总结
一、json概述:Json是一种轻量级的数据交换格式。它基于javascript的一个子集。Json采用完全独立于语言的文本格式,也使用了类似于c语言家族的习惯。
这些特性使json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
二、json和xml优劣对比
【xml】
优势:1.格式统一,符合标准。2容易与其他系统进行远程交互,数据共享比较方便。3可扩展行强。
劣势:1.xml文件庞大,格式复杂,冗余标记多,传输比较占用带宽。
2.服务端和客户端都需要花费大量代码来生成和解析xml.代码不易于维护。
3.客户端不同浏览器之间解析xml方式不一致,需要重复编写很多代码。
【json】
优势:1数据格式简,单易于读写,冗余标记少,格式都是压缩的,占用带宽小。
2.易于解析和生成,json是javascript的原生格式,客户端javascript可以简单的通过eval()将json字符串转成json对象。
3. JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势
劣势:1.没有xml那么流行和使用的广泛,没有xml那么通用。
2.Json是整体解析,xml可逐步解析,因此对大量数据而言,xml更具优势。
3.使用eval()函数解析及生成json对象时,可能会执行其中的恶意代码。
三、json格式结构
json简单的说就是javascript中的对象和数组,通过这两种结构组合表示各种复杂的结构。
- 对象:对象在js中表示为“{}”括起来的内容,数据结构为{key:value,key:value,……}的键值对的结构,在面向对象的语言中,key为对象属性
,value为对应的属性值。取值方法为对象对象.key获取属性值,这个属性值可以是数字、字符串、数组、对象几种。
- 数组:数组在js中是括号“[]”括起来的内容,数据结构为[“java”,”javascript”,”vb”,……],取值方式和所有语言一样,使用索引获取,字段值类型可以
是数字、字符串、数组、对象几种。
综合示例:
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
] }
四、javascript中的json
- 赋值给变量
var people ={"programmers":[{ "Name":"Brett","email":"aaaa" },{ "Name":"Jason","email": "bbbb" }],"authors":[{"Name":"Isaac","genre":"fiction" },"Name":"Tad", "genre":"fantasy"}]}
或
Var jsonObj=eval(”(”+json字符串+”)”);注:json字符串外加 圆括号,原因在于
- 访问数据
People.programmers[0].email;
遍历:for(var i=0;i<people. Programmers.length;i++){ alert( people. Programmers[i].Name); }
- 修改数据
People.programmers[0].email=”bbb”;
- 转换为字符串
Var jsonstr=people.toJSONString();
或
Var jsonStr=JSON.stringify(json对象);
五、Json校验工具(BeJson)
http://www.bejson.com/go.php?u=http://www.bejson.com/index.php
功能简介:1、格式化校验。2、JSON视图。3、压缩转义。4.json在线编辑器。5.在线发送json数据。6.json着色。7.Json-XML互转……
六、C#中使用newtonsoft.json.dll 序列号和反序列化json对象(版本4.5.0.0)
- 反序列化(JsonConvert.DeserializeObject)
例1:
string jsonText = "{\"key1\":\"value1\",\"key2\":\"value2\"}";
Dictionary<string, string> dic = JsonConvert.DeserializeObject<Dictionary<string, string>>( jsonText);
例2:
public class JObject
{
……
}
JObject o = (JObject)JsonConvert.DeserializeObject(jsonText);
- 序列化
例:
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string output = JsonConvert.SerializeObject(product);
- 读取json
例:
string jsonStr="{\"key1\":\"value1\",\"key2\":\"value2\"}";
JsonReader reader = new JsonTextReader(new StringReader(jsonStr));
while (reader.Read())
{
string dd = reader.Value + "____" + reader.ValueType + "______" + reader.TokenType;
}
- Json写入
StringWriter sw=new StringWriter ();
JsonWriter jw = new JsonTextWriter(sw);
jw.WriteStartArray();
jw.WriteValue("JSON!");
jw.WriteValue(1);
jw.WriteValue(true);
jw.WriteStartObject();
jw.WritePropertyName("property");
jw.WriteValue("value");
jw.WriteEndObject();
jw.WriteEndArray();
jw.Flush();//见注释1
string jsonText = sw.GetStringBuilder().ToString();
参阅:http://baike.baidu.com/view/136475.htm
http://www.cnblogs.com/judgelee/archive/2011/12/29/2306660.html
http://www.cnblogs.com/myjavawork/archive/2011/03/10/1979279.html
http://blog.csdn.net/mazhaojuan/article/details/8592969
http://www.cnblogs.com/freexiaoyu/archive/2013/03/15/2961216.html
注释:
- flush() 是把缓冲区的数据强行输出, 主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。
浙公网安备 33010602011771号