js对象(object)与文本(string)互转
曾经我天真的以为json对象和js对象是一个样子的.. 后来入了坑才知道其实是不一样的- -. 所以在开始之前我先强调一下js对象和json对象这两个对象的文本表现形式的书写格式.
在下文我会按照以下规则对变量进行命名加以区分, 以免混乱:
对象,以Obj结尾
- json对象:jsonObj
- js对象:jsObj
对象文本表现形式,以ObjStr结尾
- json对象字符串:jsonObjStr
- js对象字符串:jsObjStr
语法格式
1 | var jsObj = {name: "tom", age: 12}; // js对象 |
可以看到js对象的属性名没有用引号进行包裹, 而json对象的属性名用了引号包裹.
虽然在Javascript里JSON对象也称为js对象的一种, 在很大程度上都是类似的, 但是在数据传输时我们都是用的JSON来传递, 所以在书写时应该注意相应的格式. 不然在使用Jquery的时候会出现服务端传递的不是json字符串出现错误导致success回调函数无法执行.
上面说完了, 下面开始说一下互相转换.
js对象、json对象转文本
1 | var jsObj = {name: "tom", age: 15}; |
JSON.stringify()方法, 不管传递的是js对象还是json对象都会转成字符串. 而且当传递是一个是js对象时, 转换后的字符串中的属性会自动包裹引号.(实际上是转成json对象字符串了)
文本转js对象、json对象
使用eval函数可以直接将文本转成对象。
1 | var jsObjStr = '{name: "tom", age: 15}'; |
除了上面用eval函数转换json对象文本到json对象以外,还可以用JSON.parse(jsonObjStr)
方法来转换,但此方法只用于将json对象文本转为json对象。
如果参数传递是js对象文本的话, 那么就会报语法错误:
VM2253:1 Uncaught SyntaxError: Unexpected token n in JSON at position 1
1 | var jsonObjStr = '{"name": "jerry", "age": 16}'; |
总结
- 如果是对象转文本. 用
JSON.stringify(obj)
方法 - 如果是文本转对象, 用
eval('('+ xxObjStr +')')
方法, 要用**()**包裹要转换的字符串变量. JSON.parse(jsonObjStr)
方法只用于将json对象文本转成json对象.
如果本人说的不易理解, 也可参考: http://www.haorooms.com/post/js_jsons_h