Rumah > hujung hadapan web > tutorial js > Contoh terperinci format data JSON dan kemahiran rentetan medan data format json conversion_javascript

Contoh terperinci format data JSON dan kemahiran rentetan medan data format json conversion_javascript

WBOY
Lepaskan: 2016-05-16 15:21:10
asal
1585 orang telah melayarinya

JSON (JavaScript Object Notation) ialah format pertukaran data yang ringan. JSON menggunakan format teks bebas bahasa sepenuhnya Ciri-ciri ini menjadikan JSON bahasa pertukaran data yang ideal. Mudah untuk manusia membaca dan menulis, dan mudah untuk mesin menghuraikan dan menjana.

Infrastruktur

JSON dibina daripada dua struktur:

1. Koleksi pasangan nama/nilai. Dalam bahasa yang berbeza, ia difahami sebagai objek, rekod, struct, kamus, jadual cincang, senarai berkunci atau tatasusunan bersekutu).

2. Senarai nilai tersusun. Dalam kebanyakan bahasa, ia difahami sebagai tatasusunan.

Contoh Asas

Ringkasnya, JSON menukar satu set data yang diwakili dalam objek JavaScript kepada rentetan, yang kemudiannya boleh dihantar dengan mudah antara fungsi atau daripada klien web dalam aplikasi tak segerak Diluluskan ke program sebelah pelayan. Rentetan ini kelihatan agak pelik, tetapi JavaScript boleh mentafsirnya dengan mudah dan JSON boleh mewakili struktur yang lebih kompleks daripada "pasangan nama/nilai". Sebagai contoh, tatasusunan dan objek kompleks boleh diwakili dan bukannya senarai mudah kunci dan nilai.

mewakili pasangan nama/nilai

Dalam bentuk yang paling mudah, JSON berikut boleh digunakan untuk mewakili "pasangan nama/nilai": { "nama pertama": "Brett" }
Contoh ini sangat asas dan sebenarnya menggunakan lebih banyak ruang daripada teks biasa yang setara "nama/pasangan nilai": firstName=Brett

Walau bagaimanapun, JSON muncul sendiri apabila berbilang pasangan nama/nilai dirangkai bersama. Mula-mula, anda boleh mencipta rekod yang mengandungi berbilang "pasangan nama/nilai", seperti:

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" } 
Salin selepas log masuk

Secara sintaksis, ini bukanlah kelebihan besar berbanding "pasangan nama/nilai", tetapi dalam kes ini JSON lebih mudah digunakan dan lebih mudah dibaca. Sebagai contoh, ia menjelaskan bahawa tiga nilai di atas adalah sebahagian daripada rekod yang sama;

mewakili tatasusunan

JSON bukan sahaja meningkatkan kebolehbacaan tetapi juga mengurangkan kerumitan apabila ia datang untuk mewakili satu set nilai. Sebagai contoh, katakan anda ingin mewakili senarai nama orang. Dalam XML, banyak teg permulaan dan penamat diperlukan jika anda menggunakan pasangan nama/nilai biasa (seperti yang anda lihat dalam artikel sebelumnya dalam siri ini), format data proprietari mesti dibuat atau menukar nama kunci kepada borang person1 -nama pertama.
Jika menggunakan JSON, hanya kumpulkan berbilang rekod bersama dengan pendakap kerinting:

{ "people": [ 
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, 
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"}, 
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } 
]} 
Salin selepas log masuk

Ini tidak sukar untuk difahami. Dalam contoh ini, hanya terdapat satu pembolehubah yang dipanggil orang dan nilainya ialah tatasusunan tiga entri, setiap entri menjadi rekod untuk seseorang yang mengandungi nama pertama, nama keluarga dan alamat e-mel. Contoh di atas menunjukkan cara menggunakan kurungan untuk menggabungkan rekod menjadi satu nilai. Sudah tentu, berbilang nilai (setiap satu mengandungi berbilang rekod) boleh dinyatakan menggunakan sintaks yang sama:

{ "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" } 
] } 
Salin selepas log masuk

Perkara yang paling penting di sini ialah ia boleh mewakili berbilang nilai dan setiap nilai pula mengandungi berbilang nilai. Walau bagaimanapun, perlu diingatkan juga bahawa pasangan nama/nilai sebenar dalam rekod boleh berbeza antara entri utama yang berbeza (pengaturcara, pengarang dan pemuzik). JSON adalah dinamik sepenuhnya, membenarkan cara data diwakili berubah di tengah-tengah struktur JSON.

Tiada kekangan pratakrif yang perlu dipatuhi semasa memproses data berformat JSON. Oleh itu, dalam struktur data yang sama, cara data diwakili boleh diubah, dan perkara yang sama juga boleh diwakili dalam cara yang berbeza.

Formatkan Aplikasi

Setelah anda menguasai format JSON, menggunakannya dalam JavaScript adalah mudah. JSON ialah format JavaScript asli, yang bermaksud pemprosesan data JSON dalam JavaScript tidak memerlukan sebarang API atau kit alat khas.

Tetapkan data JSON kepada pembolehubah

Sebagai contoh, anda boleh membuat pembolehubah JavaScript baharu dan menetapkan rentetan data berformat JSON terus kepadanya:

var people = { "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" } 
] } 
Salin selepas log masuk

Ini sangat mudah; kini orang mengandungi data dalam format JSON yang kami lihat sebelum ini. Walau bagaimanapun, ini tidak mencukupi kerana cara untuk mengakses data nampaknya masih belum jelas.

Akses Data

Walaupun nampaknya tidak jelas, rentetan panjang di atas sebenarnya hanyalah tatasusunan; anda boleh mengakses tatasusunan ini dengan mudah dengan meletakkannya dalam pembolehubah JavaScript. Sebenarnya, hanya gunakan notasi titik untuk mewakili elemen tatasusunan. Jadi, untuk mengakses nama akhir entri pertama dalam senarai pengaturcara, hanya gunakan kod seperti ini dalam JavaScript:

people.programmers[0].lastName; 
Salin selepas log masuk

注意,数组索引是从零开始的。所以,这行代码首先访问 people变量中的数据;然后移动到称为 programmers的条目,再移动到第一个记录([0]);最后,访问 lastName键的值。结果是字符串值 “McLaughlin”。

下面是使用同一变量的几个示例。

people.authors[1].genre // Value is "fantasy" 
people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn't one 
people.programmers[2].firstName // Value is "Elliotte" 
Salin selepas log masuk

利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。

修改 JSON 数据

正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据:

people.musicians[1].lastName = "Rachmaninov"; 
Salin selepas log masuk

在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。

转换回字符串

当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在 JavaScript 中这种转换也很简单:

String newJSONtext = people.toJSONString(); 
Salin selepas log masuk

这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。

更重要的是,可以将任何JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject的对象进行转换,只需执行相同形式的命令:

String myObjectInJSON = myObject.toJSONString(); 
Salin selepas log masuk

这就是 JSON 与本系列讨论的其他数据格式之间最大的差异。如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用 Document Object Model 这样的 API(提供了将自己的数据结构转换为文本的函数),也需要学习这个 API 并使用 API 的对象,而不是使用原生的 JavaScript 对象和语法。

最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。

概念比较

JSON和XML的比较

◆可读性

JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。

◆可扩展性

XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,而JSON却不能。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。

◆编码难度

XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有提供的工具。无工具的情况下,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多很多结构上的字符。

◆解码难度

XML的解析方式有两种:

一是通过文档模型解析,也就是通过父标签索引出一组标记。例如:xmlData.getElementsByTagName("tagName"),但是这样是要在预先知道文档结构的情况下使用,无法进行通用的封装。

另外一种方法是遍历节点(document 以及 childNodes)。这个可以通过递归来实现,不过解析出来的数据仍旧是形式各异,往往也不能满足预先的要求。

凡是这样可扩展的结构数据解析起来一定都很困难。

JSON也同样如此。如果预先知道JSON结构的情况下,使用JSON进行数据传递简直是太美妙了,可以写出很实用美观可读性强的代码。如果你是纯粹的前台开发人员,一定会非常喜欢JSON。但是如果你是一个应用开发人员,就不是那么喜欢了,毕竟xml才是真正的结构化标记语言,用于进行数据传递。

而如果不知道JSON的结构而去解析JSON的话,那简直是噩梦。费时费力不说,代码也会变得冗余拖沓,得到的结果也不尽人意。但是这样也不影响众多前台开发人员选择JSON。因为json.js中的toJSONString()就可以看到JSON的字符串结构。当然不是使用这个字符串,这样仍旧是噩梦。常用JSON的人看到这个字符串之后,就对JSON的结构很明了了,就更容易的操作JSON。

以上是在Javascript中仅对于数据传递的xml与JSON的解析。在Javascript地盘内,JSON毕竟是主场作战,其优势当然要远远优越于xml。如果JSON中存储Javascript复合对象,而且不知道其结构的话,我相信很多程序员也一样是哭着解析JSON的。

◆实例比较

XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。

用XML表示中国部分省市数据如下:

<&#63;xml version="1.0" encoding="utf-8"&#63;> 
<country> 
<name>中国</name> 
<province> 
<name>黑龙江</name> 
<cities>
<city>哈尔滨</city> 
<city>大庆</city> 
</cities> 
</province> 
<province> 
<name>广东</name> 
<cities> 
<city>广州</city> 
<city>深圳</city> 
<city>珠海</city> 
</cities> 
</province> 
</country> 
Salin selepas log masuk

用JSON表示如下:

{ 
{name:"中国", province:[ { name:"黑龙江", cities:{ city:["哈尔滨","大庆"] }, 
{name:"广东", cities:{ city:["广州","深圳","珠海"] } 
} 

Salin selepas log masuk

编码的可读性,xml有明显的优势,毕竟人类的语言更贴近这样的说明结构。json读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,恰恰是适合机器阅读,所以通过json的索引.province[0].name就能够读取“黑龙江”这个值。

编码的手写难度来说,xml还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而xml却包含很多重复的标记字符。

JSON在线校验工具

前言
JSON格式取代了xml给网络传输带来了很大的便利,但是却没有了xml的一目了然,尤其是json数据很长的时候,我们会陷入繁琐复杂的数据节点查找中。
但是国人的一款在线工具 BeJson 给众多程序员带来了一阵凉风。

功能简介

1. JSON格式化校验
很多人在得到JSON数据后,一时没有办法判断JSON数据格式是否正确,是否少或多符号而导致程序不能解析,这个功能正好能帮助大家来完成JSON格式的校验。

2. JSON视图

想必很多程序员都会遇到当找一个节点的时候,会发现如果直接对着一行行数据无从下手,就算知道哪个位置,还要一个节点一个节点的往下找,万一一不留神又得从头开始找的麻烦事。

有了这个功能,一切JSON数据都会变成视图格式,一目了然,什么对象下有多少数组,一个数组下有多少对象。

这个功能非常实用。不光有视图功能还有格式化、压缩、转义、校验功能。总之很强大。

3. 压缩转义

程序员在写JSON语句测试用例的时候,很多时候为了方便直接写了个JSON字符串做测试,但是又陷入了无止境的双引号转义的麻烦中。这款功能集压缩、转义于一身,让你在写测试用例的时候,如鱼得水。

4. JSON在线编辑器

如果你现在的电脑刚巧没有装你所熟悉的编辑器,如果你想针对拿到的JSON数据的某个节点做数据修改时,这个功能可以满足你的需求。

5. 在线发送JSON数据

大家都知道,JSON用的最多的还是web项目的开发,那你要测试一个接口是否能准确的接受JSON数据,那你就得写一个页面发送JSON字符串,重复的做着这件事。随着这个功能的横空出世,你可以摆脱写测试页面了,因为这个功能可以将指定的JSON数据发送指定的url,方便吧。

6. JSON着色

很多人在写文档时,总希望文档能一目了然,但是面对着白底黑字的JSON数据总是提不起精神没关系,使用这个功能,所有的关键字都会被着色,数据结构一目了然。

7. JSON-XML互转

顾名思义,将JSON格式的数据转化成XML格式、或者XML格式的数据转化成JSON格式,一切都不是问题。

json格式数据域字符串相互转换实例代码

字符串和json格式数据能够进行相互转换,当然这个是有实际需求的,下面是两端进行转换的实例。

一.json格式数据转换成字符串:

var arr=[{id:'id',name:'Spring'},{id:'id2',name:'Jane'}]; 
var str=JSON.stringify(arr); 
Salin selepas log masuk

要使用JSON.stringify()函数需要实现引用json2.js文件,这个在百度搜索下载即可。
输出结果:"[{id:'id',name:'Spring'},{id:'id2',name:'Jane'}]"

二.String转换为json格式数据:

var str="[{id:'id',name:'Spring'},{id:'id2',name:'Jane'}]"; 
var json=$.parseJSON(str); 
Salin selepas log masuk

输出结果:[{id:'id',name:'Spring'},{id:'id2',name:'Jane'}]

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan