`
liudaoru
  • 浏览: 1579089 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

json相关知识

    博客分类:
  • java
阅读更多
一般JSON由服务端返回字符串给调用页面的JS函数,在客户端用eval转换成JS对象。但是如果数据中含有换行时,会导致JS语法错误无法正确执行eval函数。解决办法是从数据库获取值得时候将\r\n替换成json支持的转义方式,或者在客户端先对返回的字符串做过滤.

java:
	public static String escapeCRLF(String s) {
		if (s == null || s.length() == 0){
			return "";
		}
		return s.replaceAll("\r\n", "").replaceAll("\n", "");
	}


js:
	try {
		var resultStr = res.responseText;
		resultStr = resultStr.replace(/\r\n/g,"").replace(/\n/g,"");
		var result = eval("(" + resultStr + ")");
	} catch(e) {
		document.writeln(res.responseText);
	}


===========================================
http://www.cnblogs.com/hunts/archive/2006/11/19/565141.html
What is JSON:The application/json Media Type for JSON
Network Working Group                                       D. Crockford
Request for Comments: 4627                                      JSON.org
Category: Informational                                        July 2006

The application/json Media Type for JavaScript Object Notation (JSON)
Status of This Memo
   This memo provides information for the Internet community.  It does not specify an Internet standard of any kind.  Distribution of this memo is unlimited.
Copyright Notice
   Copyright (C) The Internet Society (2006).
摘要JavaScript Object Notation (JSON) 是一种轻量级、基于文本、语言无关的数据交换格式。它是从ECMAScript语言标准衍生而来的。JSON为轻便的表示结构化数据,定义了一小套格式化规则
1.  说明JSON是结构化数据串行化的文本格式。它衍生自Javascript的对象实字,这定义在ECMAScript语言标准第三版中。
JSON能够描述四种简单的类型(字符串、数字、布尔值及null)和两种结构化类型(对象及数组)。
字符串(string)是零个或多个Unicode字符的序列。
对象(object)是无次序的零个或多个名/值(name/value)对的集合,这里的name是string类型,value则可以是string、number、boolean、null、object或array类型。
数组(array)是零个或多个value的有序序列。
"object"和"array"这两个术语来自JavaScript规范。
JSON的设计目标是使它成为小的、轻便的、文本的,而且是JavaScript的一个子集。 
1.1.  本文档使用的术语/约定
本文档中的关键字:"MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT", "SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"和"OPTIONAL",按照[RFC2119]中所描述的来解释。
本文档中的语法规则按照[RFC4234]中所描述的来解释。
2.  JSON语法JSON文本是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个实字名。
JSON文本一个串行化的对象或数组。
JSON-text = object / array
以下是六个构造字符:
begin-array     = ws %x5B ws  ; [ 左方括号
begin-object    = ws %x7B ws  ; { 左大括号
end-array       = ws %x5D ws  ; ] 右方括号
end-object      = ws %x7D ws  ; } 右大括号
name-separator  = ws %x3A ws  ; : 冒号
value-separator = ws %x2C ws  ; , 逗号
在这六个构造字符的前或后允许存在无意义的空白符。

ws = *(
            %x20 /              ; 空格符
            %x09 /              ; 水平制表符
            %x0A /              ; 换行符
            %x0D                ; 回车符
     )
2.1.  值
JSON必须(MUST)是一个对象、数组、数字或字符串,或者是下面三个实字名之一:
false null true
实字名必须(MUST)是小写的,且不允许有其它的实字名。

value = false / null / true / object / array / number / string
false = %x66.61.6c.73.65   ; false
null  = %x6e.75.6c.6c      ; null
true  = %x74.72.75.65      ; true
2.2.  对象
对象结构被表示为:一对大括号包围着零个或多个name/value对(或者是成员) 。名是string类型的。每个名后面根一个冒号,把名与值分开。逗号则隔开紧跟在值后的另一个名。对象中的这些名应该(SHOULD)是唯一的。

object = begin-object [ member *( value-separator member ) ] end-object
member = string name-separator value
2.3.  数组
数组结构表示为:方括号包围着零个或多个值(或是元素)。元素间以逗号相隔。
array = begin-array [ value *( value-separator value ) ] end-array
2.4.  数字
数字的表示法与其它多数编程语言相似。一个数字包括一个可能带着负号的整数成分,它后面可能跟着一个小数部分或是指数部分。
不允许有八进制及十六进制形式。前面带有0也是被禁止的。
小数部分是一个小数点后跟着一个或多个阿拉伯数字。
指数部分以大写或小写的E开头,E后面可以跟一个正/负号。接着是一个或多个阿拉伯数字。
数字值不能表示成阿拉伯数字数字的序列(如Infinity和Nan是不允许的)。
number = [ minus ] int [ frac ] [ exp ]
decimal-point = %x2E       ; .
digit1-9 = %x31-39         ; 1-9
e = %x65 / %x45            ; e E
exp = e [ minus / plus ] 1*DIGIT
frac = decimal-point 1*DIGIT
int = zero / ( digit1-9 *DIGIT )
minus = %x2D               ; -
plus = %x2B                ; +
zero = %x30                ; 0
2.5.  字符串
字符串的表示法与C语言家族的规范类似。string以引号开始与结束。所有的Unicode字符都可以放置在引号中,除了转义字符:引号、反斜杆\、控制符(U+0000 - U+001F)。
所有的这些字符都因该避免。如果字符在基本的多语言环境中(U+0000 - U+FFFF),它可以以这样的六字符序列表示:一个反斜杆,后面跟一个字母U,再跟四个字符代号的十六进制编码的阿拉伯数字。A - F这些十六进制字母可以小写。所以像只包含一个反斜杆的字符可以表示成:"\u005C"。
另一种办法,可以用两个转义字符序列来表示一些常用的字符。所以像只包含一个反斜杆字符的字符串可以更简洁的表示成"\\"。
转义一个在多语言环境中不存在的字符,这个字符可以表示成一个12字符的序列,编码为UTF-16的代用对(UTF-16 surrogate pair)。所以像只包含一个G音谱字符的字符串可以表示为"\uD834\uDD1E"。
          string = quotation-mark *char quotation-mark
          char = unescaped /
                escape (
                    %x22 /          ; "    quotation mark  U+0022
                    %x5C /          ; \    reverse solidus U+005C
                    %x2F /          ; /    solidus         U+002F
                    %x62 /          ; b    backspace       U+0008
                    %x66 /          ; f    form feed       U+000C
                    %x6E /          ; n    line feed       U+000A
                    %x72 /          ; r    carriage return U+000D
                    %x74 /          ; t    tab             U+0009
                    %x75 4HEXDIG )  ; uXXXX                U+XXXX
          escape = %x5C              ; \
          quotation-mark = %x22      ; "
          unescaped = %x20-21 / %x23-5B / %x5D-10FFFF
3. 编码JSON文SHALL被编码为Unicode。缺省的编码为UTF-8。
因为JSON文本的开头两个字符总是ASCII字符[RFC0020],我们可以通过查看前面4个字符的0部分,来判断8字节的流是UTF-8还是UTF-16(BE or LE),或者是UTF-32(BE or LE)。
                      00 00 00 xx  UTF-32BE
           00 xx 00 xx  UTF-16BE
           xx 00 00 00  UTF-32LE
           xx 00 xx 00  UTF-16LE
           xx xx xx xx  UTF-8
4. 解析器JSON解析器将JSON文本转换成其它的表现形式。它必须(MUST)能够接受符合JSON语法的所有文本。解析器也可以(MAY)接受非JSON的形式或一些扩展。
实现中,可以设置限制它所接受的文本大小,可以限制JSON文本的最大深度,可以设置数的范围,也可以限制字符串中的字符长度。
5. 生成器JSON生成器生成JSON文本。目标文本必须(MSUT)严格遵守JSON的语法。
6. IANA ConsiderationsJSON文本的MIME类型是application/json。
类型名:application
图表类型名:JSON
必需的参数:n/a
可选的参数:n/a
编码选择: 8bit if UTF-8; binary if UTF-16 or UTF-32
JSON may be represented using UTF-8, UTF-16, or UTF-32.  When JSON is written in UTF-8, JSON is 8bit compatible.  When JSON is written in UTF-16 or UTF-32, the binary content-transfer-encoding must be used. 
安全考虑:
脚本语言通常都有安全问题。JSON是JavaScript的子集,但是它是一个撤消了附值与调用的安全子集。
JSON文本可以安全的传递个JavaScript的eval()函数。如果字符没有被装入JSON标记符中的标记中,这可以通过JavaScript的两个正则表达式,使用test和replace方法,来快速的判定。  
      var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(

             text.replace(/"(\\.|[^"\\])*"/g, ''))) &&

         eval('(' + text + ')');

互用性考虑: n/a

发布的规范: RFC 4627

使用该媒体类型的应用程序:

JSON has been used to exchange data between applications written in all of these programming languages: ActionScript, C, C#, ColdFusion, Common Lisp, E, Erlang, Java, JavaScript, Lua, Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Scheme.
其它额外信息(略)
7. Security Considerations参考第六节中的Security Considerations。

8. 例子一个JSON对象:
   {
      "Image": {
          "Width":  800,
          "Height": 600,
          "Title":  "View from 15th Floor",
          "Thumbnail": {
              "Url":    "http://www.example.com/image/481989943",
              "Height": 125,
              "Width":  "100"
          },
          "IDs": [116, 943, 234, 38793]
        }
   }
该对象的Image成员是一个对象,而Image的Thumbnail成员也是一个对象,且Image的IDs成员是一个数组。
下面是一个包含两个对象JSON数组:
   [
      {
         "precision": "zip",
         "Latitude":  37.7668,
         "Longitude": -122.3959,
         "Address":   "",
         "City":      "SAN FRANCISCO",
         "State":     "CA",
         "Zip":       "94107",
         "Country":   "US"
      },
      {
         "precision": "zip",
         "Latitude":  37.371991,
         "Longitude": -122.026020,
         "Address":   "",
         "City":      "SUNNYVALE",
         "State":     "CA",
         "Zip":       "94085",
         "Country":   "US"
      }
   ]
9. 参考文献9.1.  标准化参考
   [ECMA]    European Computer Manufacturers Association, "ECMAScript
             Language Specification 3rd Edition", December 1999,
             <http://www.ecma-international.org/publications/files/
             ecma-st/ECMA-262.pdf>.
   [RFC0020] Cerf, V., "ASCII format for network interchange", RFC 20,
             October 1969.
   [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
             Requirement Levels", BCP 14, RFC 2119, March 1997.
   [RFC4234] Crocker, D. and P.  Overell, "Augmented BNF for Syntax
             Specifications: ABNF", RFC 4234, October 2005.
   [UNICODE] The Unicode Consortium, "The Unicode Standard Version 4.0",
             2003, http://www.unicode.org/versions/Unicode4.1.0/.
作者联系方式
   Douglas Crockford
   JSON.org
   EMail: douglas@crockford.com
完整的版权声明
   Copyright (C) The Internet Society (2006).
   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.
   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
知识产权
   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.
   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.
   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.
鸣谢
   Funding for the RFC Editor function is provided by the IETF
   Administrative Support Activity (IASA).
1
2
分享到:
评论

相关推荐

    json 学习笔记 相关知识点

    ### JSON学习笔记:深入理解与应用 #### 一、JSON简介与重要性 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于ECMAScript的一个子集,采用...

    知识图谱导出JSON可视化

    在“知识图谱导出JSON可视化”这个主题中,我们首先需要理解如何将知识图谱的数据结构转换成JSON。知识图谱通常包含节点(实体)和边(关系)。节点表示实体,而边则描述节点之间的联系。在JSON中,这些可以表示为...

    JSON相关知识汇总

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON基于JavaScript语言的一个子集,但...掌握这些知识点对理解和操作JSON数据格式是基础且必不可少的。

    Json知识简介+编程知识+技术介绍

    Json知识简介+编程知识+技术介绍;Json知识简介+编程知识+技术介绍;Json知识简介+编程知识+技术介绍;Json知识简介+编程知识+技术介绍;Json知识简介+编程知识+技术介绍;Json知识简介+编程知识+技术介绍;Json知识...

    关于JSON的知识------JSON 只是简介

    这是一个静态页面,里面介绍了关于JSON的知识,如果需要得到jsp,asp,js,java,c++等等各种语言里JSON的知识和运用工具,可以用页面下方的链接去找。

    AjaxJson 实例 AjaxJson

    在学习 AjaxJson 时,你需要掌握 JavaScript 基础,特别是 DOM 操作和 JSON 相关知识。同时,理解 HTTP 请求的工作原理也很重要。实践是最好的老师,尝试创建自己的实例,不断调试和优化,这样你会更快地掌握 Ajax...

    JSON入门知识.docx

    JSON入门知识.docx

    JSON入门知识.pdf

    JSON入门知识.pdf

    json字符串查看工具源代码

    JSON(JavaScript Object Notation)是一种轻量...这两个工具的源代码为初学者提供了一个实践JSON处理和UI构建的绝佳平台,通过深入学习和修改源代码,你可以更好地掌握JSON相关知识,并提升自己的JavaScript编程能力。

    将web Form 的数据转化成json字符串及json对象进行处理的JS

    在Web开发中,经常需要将用户在HTML表单(Form)中输入的数据转换为JSON格式,以便于数据传输和处理。这个过程涉及到...同时,掌握JavaScript的DOM操作、对象和JSON相关知识也是成为合格前端开发者的必备技能。

    离线JSON格式化工具

    这两款工具都为开发者提供了强大的JSON处理能力,无论是在日常开发、调试,还是在学习JSON相关知识时,都能大大提高工作和学习的效率。在实际使用过程中,可以根据个人偏好和具体需求选择合适的工具,提升JSON数据...

    json的基本知识

    通过学习JSON的基本知识,包括其结构、数据类型以及与JavaScript对象的转换,你可以更好地理解和处理网络通信中的数据,从而在Web开发中更加得心应手。无论是在后端服务器与前端页面间传递数据,还是在不同的应用...

    java json 相关的所有jar包

    以下是一些常见的Java JSON处理库及其相关知识点: 1. **Jackson** Jackson是Java最常用的JSON库之一,由FasterXML提供。它提供了多种API,如`Jackson-databind`、`Jackson-core`和`Jackson-annotations`。`...

    json基础知识附带实例

    json

    json知识总结

    JSON(JavaScript Object Notation,JS对象表示法)是一种轻量级的数据交换格式,具有易于阅读和编写、易于机器解析和生成的特点。它的设计目标是易于人阅读和编写,同时也易于机器解析和生成。尽管JSON是基于...

    json相关的包下载

    以下是一些关于Python `json`模块的关键知识点: 1. **编码(Encoding)**:`json.dumps()`函数用于将Python对象转换为JSON字符串。例如,你可以将字典、列表、数字、字符串、True/False和None等转换为JSON格式。...

    java json api,json api

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于Web服务和应用程序之间的数据传输,因为它易于阅读和编写,...在理解并熟练掌握这些知识点后,开发者能够更好地应对JSON数据处理的各种场景。

    JSON_Trans.rar_LABVIEW转换JSON_json Labview_labivew json_labview j

    以下是一些关于LabVIEW与JSON交互的关键知识点: 1. **JSON格式**:JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它主要由键值对(key-value pairs)组成,键用引号包围,值可以...

    JSON解析 创建JSON

    理解JSON的基本结构,学会在不同语言中创建和解析JSON,以及了解相关扩展如JSON Schema、JSONP和JSON-LD,都将对提升你的Web开发能力大有裨益。在实际项目中,熟练掌握这些知识点能帮助你更高效地处理数据交换,实现...

    古诗内容提取json格式转jsonl

    下面我们将深入探讨这两个格式以及转换过程中的关键知识点。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。JSON采用键值对的形式,通常...

Global site tag (gtag.js) - Google Analytics