问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是JSON

发布网友 发布时间:2022-04-20 17:37

我来回答

2个回答

懂视网 时间:2022-04-07 15:22

JSON详解:

JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。XML也是一种数据交换格式,为什么没有选择XML呢?因为XML虽然可以作为跨平台的数据交换格式,但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据。这篇文章主要从以下几个方面来说明JSON。

1,JSON的两种结构
2,认识JSON字符串
3,在JS中如何使用JSON
4,在.NET中如何使用JSON
5,总结

一、JSON的两种结构

JSON有两种表示结构,对象和数组。
对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。

{
 key1:value1,
 key2:value2,
 ...
}

其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组

数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码。

[
 {
 key1:value1,
 key2:value2 
 },
 {
  key3:value3,
  key4:value4 
 }
]

二、认识JSON字符串

之前我一直有个困惑,分不清普通字符串,json字符串和json对象的区别。经过一番研究终于给弄明白了。比如在js中。

字符串:这个很好解释,指使用“”双引号或’’单引号包括的字符。例如:var comStr = 'this is string';
json字符串:指的是符合json格式要求的js字符串。例如:var jsonStr = "{StudentID:'100',Name:'tmac',Hometown:'usa'}";
json对象:指符合json格式要求的js对象。例如:var jsonObj = { StudentID: "100", Name: "tmac", Hometown: "usa" };

三、在JS中如何使用JSON

JSON是JS的一个子集,所以可以在JS中轻松地读,写JSON。读和写JSON都有两种方法,分别是利用”.”操作符和“[key]”的方式。
我们首先定义一个JSON对象,代码如下。

var obj = {
  1: "value1",
  "2": "value2",
  count: 3,
  person: [ //数组结构JSON对象,可以嵌套使用
   {
    id: 1,
    name: "张三"
   },
   {
    id: 2,
    name: "李四"
   }
   ],
  object: { //对象结构JSON对象
  id: 1,
  msg: "对象里的对象" 
  }
 };

1、从JSON中读数据

function ReadJSON() {
  alert(obj.1); //会报语法错误,可以用alert(obj["1"]);说明数字最好不要做关键字
  alert(obj.2); //同上

  alert(obj.person[0].name); //或者alert(obj.person[0]["name"])
  alert(obj.object.msg); //或者alert(obj.object["msg"])
 }

2、向JSON中写数据

比如要往JSON中增加一条数据,代码如下:

function Add() { 
  //往JSON对象中增加了一条记录
  obj.sex= "男" //或者obj["sex"]="男"
 }

增加数据后的JSON对象如图:

JSON.jpg

3、修改JSON中的数据

我们现在要修改JSON中count的值,代码如下:

function Update() {
  obj.count = 10; //或obj["count"]=10
 }

修改后的JSON如图:

JSON01.jpg

4、删除JSON中的数据

我们现在实现从JSON中删除count这条数据,代码如下:

function Delete() {  
 delete obj.count;//或obj["count"]
}

删除后的JSON如图:

JSON02.jpg

可以看到count已经从JSON对象中被删除了。

5、便利JSON对象

可以使用for…in…循环来遍历JSON对象中的数据,比如我们要遍历输出obj对象的值,代码如下:

function Traversal() {
  for (var c in obj) {
  console.log(c + ":", obj[c]);
  }
}

程序输出结果为:

JSON03.jpg

四、在.NET中如何使用JSON

说到在.net中使用JSON,就不得不提到JSON.NET,它是一个非常著名的在.net中处理JSON的工具,我们最常用的是下面两个功能。

1、通过序列化将.NET对象转换为JSON字符串

在web开发过程中,我们经常需要将从数据库中查询到的数据(一般为一个集合,列表或数组等)转换为JSON格式字符串传回客户端,这就需要进行序列化,这里用到的是JsonConvert对象的SerializeObject方法。

其语法格式为:JsonConvert.SerializeObject(object)

代码中的”object”就是要序列化的.net对象,序列化后返回的是json字符串。

比如,现在我们有一个TStudent的学生表,表中的字段和已有数据如图所示

JSON04.jpg

JSON05.jpg

从表中我们可以看到一共有五条数据,现在我们要从数据库中取出这些数据,然后利用JSON.NET的JsonConvert对象序列化它们为json字符串,并显示在页面上。C#代码如下

protected void Page_Load(object sender, EventArgs e)
 {  using (L2SDBDataContext db = new L2SDBDataContext())
  {
  List<Student> studentList = new List<Student>();  var query = from s in db.TStudents    select new { 
    StudentID=s.StudentID,
    Name=s.Name,
    Hometown=s.Hometown,
    Gender=s.Gender,
    Brithday=s.Birthday,
    ClassID=s.ClassID,
    Weight=s.Weight,
    Height=s.Height,
    Desc=s.Desc
    };  foreach (var item in query)
  {
   Student student = new Student { StudentID=item.StudentID,Name=item.Name,Hometown=item.Hometown,Gender=item.Gender,Brithday=item.Brithday,ClassID=item.ClassID,Weight=item.Weight,Height=item.Height,Desc=item.Desc};
   studentList.Add(student);
  }
  lbMsg.InnerText = JsonConvert.SerializeObject(studentList);
  }
 }

输出结果为:

JSON06.jpg

从图中我们可以看到,数据库中的5条记录全部取出来并转化为json字符串了。

2,使用LINQ to JSON定制JSON数据

使用JsonConvert对象的SerializeObject只是简单地将一个list或集合转换为json字符串。但是,有的时候我们的前端框架比如ExtJs对服务端返回的数据格式是有一定要求的,比如下面的数据格式,这时就需要用到JSON.NETLINQ to JSON,LINQ to JSON的作用就是根据需要的格式来定制json数据。

比如经常用在分页的json格式如代码:

{ 
 "total": 5, //记录总数
 "rows":[
 //json格式的数据列表
 ]
}

使用LINQ to JSON前,需要引用Newtonsoft.Jsondllusing Newtonsoft.Json.Linq的命名空间。LINQ to JSON主要使用到JObject, JArray, JProperty和JValue这四个对象,JObject用来生成一个JSON对象,简单来说就是生成”{}”,JArray用来生成一个JSON数组,也就是”[]”,JProperty用来生成一个JSON数据,格式为key/value的值,而JValue则直接生成一个JSON值。下面我们就用LINQ to JSON返回上面分页格式的数据。代码如下:

protected void Page_Load(object sender, EventArgs e)
 {
  using (L2SDBDataContext db = new L2SDBDataContext())
  {
  //从数据库中取出数据并放到列表list中
  List<Student> studentList = new List<Student>();
  var query = from s in db.TStudents
    select new
    {
    StudentID = s.StudentID,
    Name = s.Name,
    Hometown = s.Hometown,
    Gender = s.Gender,
    Brithday = s.Birthday,
    ClassID = s.ClassID,
    Weight = s.Weight,
    Height = s.Height,
    Desc = s.Desc
    };
  foreach (var item in query)
  {
   Student student = new Student { StudentID = item.StudentID, Name = item.Name, Hometown = item.Hometown, Gender = item.Gender, Brithday = item.Brithday, ClassID = item.ClassID, Weight = item.Weight, Height = item.Height, Desc = item.Desc };
   studentList.Add(student);
  }

  //基于创建的list使用LINQ to JSON创建期望格式的JSON数据
  lbMsg.InnerText = new JObject(
   new JProperty("total",studentList.Count),
   new JProperty("rows",
    new JArray(
     //使用LINQ to JSON可直接在select语句中生成JSON数据对象,无须其它转换过程
     from p in studentList
     select new JObject(
      new JProperty("studentID",p.StudentID),
      new JProperty("name",p.Name),
      new JProperty("homeTown",p.Hometown)
      )
     )
    )
   ).ToString();
  }
 }

输出结果为:

JSON07.jpg

3、处理客户端提交的客户端数据

客户端提交过来的数据一般都是json字符串,有了更好地进行操作(面向对象的方式),所以我们一般都会想办法将json字符串转换为json对象。例如客户端提交了以下数组格式json字符串。

[
 {StudentID:"100",Name:"aaa",Hometown:"china"},
 {StudentID:"101",Name:"bbb",Hometown:"us"},
 {StudentID:"102",Name:"ccc",Hometown:"england"}
]

在服务端就可以使用JObject或JArray的Parse方法轻松地将json字符串转换为json对象,然后通过对象的方式提取数据。下面是服务端代码。

protected void Page_Load(object sender, EventArgs e)
 {
  string inputJsonString = @"
  [
   {StudentID:'100',Name:'aaa',Hometown:'china'},
   {StudentID:'101',Name:'bbb',Hometown:'us'},
   {StudentID:'102',Name:'ccc',Hometown:'england'}
  ]";
  JArray jsonObj = JArray.Parse(inputJsonString);
  string message = @"<table border='1'>
   <tr><td width='80'>StudentID</td><td width='100'>Name</td><td width='100'>Hometown</td></tr>";
  string tpl = "<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>";
  foreach (JObject jObject in jsonObj)
  {
  message += String.Format(tpl, jObject["StudentID"], jObject["Name"],jObject["Hometown"]);
  }
  message += "</table>";
  lbMsg.InnerHtml = message;
 }

输出结果为:

JSON08.jpg

当然,服务端除了使用LINQ to JSON来转换json字符串外,也可以使用JsonConvertDeserializeObject方法。如下面代码实现上面同样的功能。

List<Student> studentList = JsonConvert.DeserializeObject<List<Student>>(inputJsonString);//注意这里必须为List<Student>类型,因为客户端提交的是一个数组json
  foreach (Student student in studentList)
  {
  message += String.Format(tpl, student.StudentID, student.Name,student.Hometown);
  }

总结:

在客户端,读写json对象可以使用”.”操作符或”["key”]”,json字符串转换为json对象使用eval()函数。
在服务端,由.net对象转换json字符串优先使用JsonConvert对象的SerializeObject方法,定制输出json字符串使用LINQ to JSON。由json字符串转换为.net对象优先使用JsonConvert对象的DeserializeObject方法,然后也可以使用LINQ to JSON。

想了解更多相关内容请访问PHP中文网:JSON视频教程

热心网友 时间:2022-04-07 12:30

不同类型的变量转换为JSON格式的方式稍有不同。(1)将数值型、布尔型变量和函数对象转换为JSON格式非常简单,不需要做任何处理,(2)将字符串型变量转换为JSON格式时,需要先处理其中的某些特殊字符。例如双引号、单引号和回车、换行符,将其替换为反斜杠"转义后的字符,然后用引号将转换后的内容括起来。代码如下:return(""""+obj.replace(/(["""'])/g,"""$1").replace(/"r/,"""r").replace(/"n/,"""n").replace(/"t/,"""t")+"""");(3)将日期时间型变量转换为JSON格式时,需要将其进行特殊处理,代码如下:return("(new Date("""+obj.toUTCString()+"""))");(4)将正则表达式转换为JSON格式时,通过此对象的source获取其内容。不仅仅需要处理source中的特殊字符,还需要注意设置其global,ignoreCase和multiline属性,代码如下:return("(new RegExp("""+String(obj.source).replace(/("W)/g,"""$1")+""","""+(obj.global?"g":"")+(obj.ignoreCase?"i":"")+(obj.multiline?"m":"")+"""))");(5)将数组对象转换为JSON格式时,递归调用toJSONString函数依次序列化其中的每个元素,然后将获得的各个字符串用逗号连接,在最外围用方括号[]将其括起来,代码如下:var re = new Array();for(var i=0; i<obj.length; i++)re.push(toJSONString(obj[i]));return("[" + re.join(", ") + "]");(6)将Object对象转换为JSON格式时,做法与数组对象类似,同样需要通过递归调用来依次处理其中的每个组成元素。此外,需要注意的是,其组成元素序列化时,需要构成名值对的形式。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
蚂蚁泡酒适合哪些人喝 蚂蚁酒的功效与禁忌蚂蚁酒的功效与作用 热血无赖卡怎么办 了解这两方面内容 益生菌孕妇 孕妇能喝益生菌吗 羽毛球双打底线是内线还是外线 为什么泰国两位尊者有不死之身 秦始皇活了多少岁?当了几年皇帝? DELL电脑D630.PP18L2手机。才用了4个多月。多少钱我可以买呢,麻烦谁说... dellpp18l现在买多少钱 json格式 解析json是什么意思 json是什么 json是什么意思 请问vivoZ1青春版支持OTG功能吗? vivoz1和vivoz1青春版的手机壳一样吗 vivoz1青春版手机和小米8青春版手机哪个好,性价比... vivoz1青春版支持多大外加sd卡? QQ邮箱的星标邮件是干什么用的? vivoy89和vivoz1青春版是不是一个手机,为什么价格... vivoz1青春版和Y3标准版哪个好? vivoZ1青春版玩王者和吃鸡怎么样 是vivo z1青春版好还是荣耀7c好? vivoz1青春版和华为8cla哪个好 vivoz1青春版和荣耀9i那个好? vivoZ1青春版,官网为什么没有这个手机型号? vivo z1青春版6 64g多少钱 vivoz1青春版是什么,新上市的手机吗,跟小米8青春... vivo z1什么时候上市时间 vivoz1青春版 什么事JSON格式:看了半天也没看明白到底什么事jso... java中的json是什么意思 json 格式问题 json格式解析 是个什么格式的数据 json数据 请问Java中json是什么? 如何自己在家清洗地毯 长毛地毯如何清洗和漂白? 客厅地毯自己在家怎样清洗? 北京洗地毯哪家方法是什么.自己如何清洗地毯 开荒保洁不如自己做 开荒保洁自己怎么做 洗地工作日记? 无人驾驶洗地机会自己洗地了! 老婆拖地总说太累,有没有好用的拖把,拖地干净,... 装修开荒保洁自己能做吗? 如何自己洗车? 新房开荒保洁是自己做还是请人做 开荒保洁如何做,开荒保洁是自己做好吗 在网上看了很多洗地机,比较看好必胜,有用的朋友... 关于屠杀的问题我再谈谈什么叫洗地