JSON对象转字符串的一些方法

简介: 原文http://www.nowamagic.net/librarys/veda/detail/374  将后台程序(如php)发送过来的json数据转化为javascript的数组或者对象的方法十分简单,代码如下:1    // 假设后台发送的json数据为 '{a:2,b:1}' 存储于str...

原文http://www.nowamagic.net/librarys/veda/detail/374

 将后台程序(如php)发送过来的json数据转化为javascript的数组或者对象的方法十分简单,代码如下:
1    // 假设后台发送的json数据为 '{a:2,b:1}' 存储于str中
2    var data = eval( '(' + str + ')' );

然而想将一个javascript对象转化为json格式的字符串却并不那么简单,特别是对象的属性值递归包含一个对象时(如 var obj={a:[2,3],b:{m:[3,4],n:2} } ),那么有没有什么方法将obj转化为json格式的字符串呢?

当然你可以自己写一个函数,递归遍历一个对象并将其转化为json格式的字符串,对于大部分人来说这有些困难并容易出错。幸好已经有人做好了这件事情,你只用包含一段javascript代码即可。

json2.js

使用方法:
01    <!doctype html>
02    <html>
03    <body>
04    <script src="json2.js"></script>
05    <script>
06    var obj={a:[2,3],b:{m:[3,4],n:2} };
07    var jsonStr = JSON.stringify( obj );
08    alert(jsonStr);
09    //将显示 {"a":[2,3],"b":{"m":[3,4],"n":2}}
10    </script>
11    </body>
12    </html>

假如有两个变量,我要将a转换成字符串,将b转换成JSON对象:
1    var a={"name":"tom","sex":"男","age":"24"};
2    var b='{"name":"Mike","sex":"女","age":"29"}';

在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法。JSON.stringify(obj)将JSON转为字符串。JSON.parse(string)将字符串转为JSON格式;

上面的转换可以这么写:
1    var a={"name":"tom","sex":"男","age":"24"};
2    var b='{"name":"Mike","sex":"女","age":"29"}';
3    var aToStr=JSON.stringify(a);
4    var bToObj=JSON.parse(b);
5    alert(typeof(aToStr));  //string
6    alert(typeof(bToObj));  //object
JSON.stringify()

ie8(兼容模式),ie7和ie6没有JSON对象,不过http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;你可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。ie8(兼容模式),ie7和ie6可以使用eval()将字符串转为JSON对象:
1    var c='{"name":"Mike","sex":"女","age":"29"}';
2    var cToObj=eval("("+c+")");
3    alert(typeof(cToObj));

jQuery中也有将字符串转为JSON格式的方法jQuery.parseJSON( json ),接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript (JSON)对象。当然如果有兴趣可以自己封装一个jQuery扩展,jQuery.stringifyJSON(obj)将JSON转为字符串。

JSON.stringify(jsonobj),本来是最简便的方法,可是存在浏览器兼容问题(仅适用于IE8+,Chrome 1+,FF 3+)。下面再介绍一个方法:
01    var O2String = function (O) {
02        //return JSON.stringify(jsonobj);
03    
04        var S = [];
05        var J = "";
06        if (Object.prototype.toString.apply(O) === '[object Array]') {
07            for (var i = 0; i < O.length; i++)
08                S.push(O2String(O[i]));
09            J = '[' + S.join(',') + ']';
10        }
11        else if (Object.prototype.toString.apply(O) === '[object Date]') {
12            J = "new Date(" + O.getTime() + ")";
13        }
14        else if (Object.prototype.toString.apply(O) === '[object RegExp]' || Object.prototype.toString.apply(O) === '[object Function]') {
15            J = O.toString();
16        }
17        else if (Object.prototype.toString.apply(O) === '[object Object]') {
18            for (var i in O) {
19                O[i] = typeof (O[i]) == 'string' ? '"' + O[i] + '"' : (typeof (O[i]) === 'object' ? O2String(O[i]) : O[i]);
20                S.push(i + ':' + O[i]);
21            }
22            J = '{' + S.join(',') + '}';
23        }
24    
25        return J;
26    };

使用方法也很简单:
01    var jsonStr = O2String(
02        [
03            {
04                "Page": "plan",
05                "Custom":
06                [
07                    {
08                        "ItemName": "CustomLabel1",
09                        "ItemContent": 1,
10                        "IsItem": true,
11                        "ItemDate": new Date(1320774905467),
12                        "ItemReg": /[\w]*?/gi,
13                        "ItemFunc": function () { alert("ItemFunc"); }
14                    },
15                    {
16                        "ItemName": "CustomLabel1",
17                        "ItemContent": 1,
18                        "IsItem": true,
19                        "ItemDate": new Date(1320774905467),
20                        "ItemReg": /[\w]*?/gi,
21                        "ItemFunc": function () { alert("ItemFunc"); }
22                    }
23                ]
24            },
25            {
26                "Page": "project",
27                "Custom":
28                [
29                    {
30                        "ItemName": "CustomLabel2",
31                        "ItemContent": 2,
32                        "IsItem": false,
33                        "ItemDate": new Date(1320774905467),
34                        "ItemReg": /[\w]*?/gi,
35                        "ItemFunc": function () { alert("ItemFunc"); }
36                    },
37                    {
38                        "ItemName": "CustomLabel2",
39                        "ItemContent": 2,
40                        "IsItem": false,
41                        "ItemDate": new Date(1320774905467),
42                        "ItemReg": /[\w]*?/gi,
43                        "ItemFunc": function () { alert("ItemFunc"); }
44                    }
45                ]
46            }
47        ]
48    );
49    alert(jsonStr);
50    var jsonObj = eval("(" + jsonStr + ")");
51    alert(jsonObj.length);

   
目录
相关文章
|
4月前
|
JSON 中间件 Java
【GoGin】(3)Gin的数据渲染和中间件的使用:数据渲染、返回JSON、浅.JSON()源码、中间件、Next()方法
我们在正常注册中间件时,会打断原有的运行流程,但是你可以在中间件函数内部添加Next()方法,这样可以让原有的运行流程继续执行,当原有的运行流程结束后再回来执行中间件内部的内容。​ c.Writer.WriteHeaderNow()还会写入文本流中。可以看到使用next后,正常执行流程中并没有获得到中间件设置的值。接口还提供了一个可以修改ContentType的方法。判断了传入的状态码是否符合正确的状态码,并返回。在内部封装时,只是标注了不同的render类型。再看一下其他返回的类型;
269 3
|
7月前
|
JSON 人工智能 Go
在Golang中序列化JSON字符串的教程
在Golang中,使用`json.Marshal()`可将数据结构序列化为JSON格式。若直接对JSON字符串进行序列化,会因转义字符导致错误。解决方案包括使用`[]byte`或`json.RawMessage()`来避免双引号被转义,从而正确实现JSON的序列化与反序列化。
400 7
|
8月前
|
JSON IDE Java
鸿蒙开发:json转对象插件回来了
首先,我重新编译了插件,进行了上传,大家可以下载最新的安装包进行体验了,还是和以前一样,提供了在线版和IDE插件版,两个选择,最新的版本,除了升级了版本,兼容了最新的DevEco Studio ,还做了一层优化,就是针对嵌套对象和属性的生成,使用方式呢,一年前的文章中有过详细的概述,这里呢也简单介绍一下。
294 4
鸿蒙开发:json转对象插件回来了
|
JSON 人工智能 算法
探索大型语言模型LLM推理全阶段的JSON格式输出限制方法
本篇文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
2009 48
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
2835 52
|
12月前
|
JSON JavaScript 前端开发
处理从API返回的JSON数据时返回Unicode编码字符串怎么处理
在处理API返回的JSON数据时,遇到类似`\u7f51\u7edc\u8fde\u63a5\u9519\u8bef`的Unicode编码字符串,可使用JavaScript内置方法转换为可读文字。主要方法包括:1. 使用`JSON.parse`自动解析;2. 使用`decodeURIComponent`和`escape`组合解码;3. 在API调用中直接处理响应数据。这些方法能有效处理多语言内容,确保正确显示非ASCII字符。
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
2130 7
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
602 3
|
JSON API 数据格式
4. JSON字符串是如何被解析的?JsonParser了解一下(下)
4. JSON字符串是如何被解析的?JsonParser了解一下(下)

热门文章

最新文章