JSON转换方法总结

简介: 将JavaScript的jQuery库中表单转化为JSON对象的方法 Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现

将JavaScript的jQuery库中表单转化为JSON对象的方法

Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。

有人用替换的方法,先用serialize序列化后,将&替换成“:”、“‘”:

jquery的 serialize()方法,可以对表单项进行序列化,这本来是很方便的一个功能;但是实际使用中有时会出现如下问题:

<input name="content" value="ddd 567"/>

在执行 serialize()方法后,得到的却是 ddd+567这样的字符串;即jquery的序列化方法对空格进行了转义,转换成了 + 号

解决方法:由于serialize()方法对真正的“+”号转义的是 %2B,所以可以对serialize()后的结果进行符号替换

<script>
    var a= $('$frm1').serialize(); //序列化,默认会调用encodeURIComponent()进行编码
    alert(a); // content=ddd+++567+++987
    var b = a.replace(/\\+/g," ");  // g表示对整个字符串中符合条件的都进行替换
    b = decodeURIComponent(b); //对serialize后的内容进行解码
    alert(b); // content=ddd + 567 + 987
</script>

javascript中JSON对象与JSON字符串相互转换

1.jQuery插件支持的转换方式:

$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 

2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器:

JSON.parse(jsonstr); //可以将json字符串转换成json对象 
JSON.stringify(jsonobj); //可以将json对象转换成json对符串 

注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。

3.Javascript支持的转换方式:

eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号 

注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式

4.JSON官方的转换方式:

http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js

在开发的过程中,如果对于少量参数的前后台传递,可以直接采用ajax的data函数,按json格式传递,后台Request即可,但有的时候,需要传递多个参数,这样后台接受的时候Request很多很麻烦,此时要按照类的格式或集合的形式进行传递

例如:前台按类的格式传递JSON对象:

var jsonUserInfo = "{\"TUserName\":\"" + userName + "\",\"TInterest\":\"" + interest + "\",\"TSex\":\"" + sex + "\",\"TCity\":\"" + city + "\",\"TDetail\":\"" + detail + "\"}"; 

如拼出的jsonUserInfo 无转义符号,需要var jsonArrayFinal = JSON.stringify(jsonArray);进行转换后再传递

如果前台传递多个类格式的JSON数组,也就是集合类型:

例如:[{"name":"a"},{"name","b"},{"name","c"}],则无法传递,此时必须使用JSON.stringify将数组对象转换成字符串,再进行AJAX传递即可

JavaScript中字符串(string)转json的方法

函数eval()

testJson=eval(testJson);是错误的转换方式。正确的转换方式需要加(): testJson = eval("(" + testJson + ")");

eval()的速度非常快,但是他可以编译以及执行任何javaScript程序,所以会存在安全问题。在使用eval()。来源必须是值得信赖的。需要使用更安全的json解析器。在服务器不严格的编码在json或者如果不严格验证的输入,就有可能提供无效的json或者载有危险的脚本,在eval()中执行脚本,释放恶意代码

function ConvertToJsonForJs() {
  //var testJson = "{ name: '小强', age: 16 }";(支持)
  //var testJson = "{ 'name': '小强', 'age': 16 }";(支持)
  var testJson = '{ "name": "小强", "age": 16 }';
  //testJson=eval(testJson);//错误的转换方式
  testJson = eval("(" + testJson + ")");
  alert(testJson.name);
}

jquery.parseJSON()

使用jquery.parseJSON()方法对json的格式要求比较高,必须符合json格式

function ConvertToJsonForJq() {
  var testJson = '{ "name": "小强", "age": 16 }';
  //不知道
  //'{ name: "小强", age: 16 }' (name 没有使用双引号包裹)
  //"{ 'name': "小强", 'age': 16 }"(name使用单引号)
  testJson = $.parseJSON(testJson);
  alert(testJson.name);
}

很多时候我们需要组装字符串为json对象,首先要组合字符串,然后转换为json对象

var convertStringToJSON = function(){
    var str="{'ID':12,'Name':'Tom','Age':21}";
    var stu = eval('('+str+')');
    alert(stu.Name);
}

javascript中对象与字符串的互转

对象转为字符串:通过JSON.encode方法,这个是json.js里面的方法,引入到当前文件就可以了。

字符串转换为对象:使用JSON.decode方法,同上,引入js就可以了。jQuery中有个方法,$.parseJson也可以实现

转义字符(\\)对JavaScript中JSON.parse的影响

JSON是一个提供了stringify和parse方法的内置对象,前者用于将js对象转化为符合json标准的字符串,后者将符合json标准的字符串转化为js对象

一般来说在JSON.parse的参数包含转移字符的时候会遇到两次转义的问题,其实第一次是字符串本身的转义,第二次是将真正转为js对象的转义

举例如下:

将字符串'{"a":"b","b":"\\"}'传递给JSON.parse,首先解析器提取单引号括起来的字符串时认为第一个转义第二个 第三个转义第四个,也就是说实际可输出字符串是{"a":"b","b":"\"}(可通过console.log('{"a":"b","b":"\\"}')验证),之后正式转为js对象的时候还有一次转义,也就是实际输出字符串中的第一个转义第二个(此时只有两个)。所以console.log(JSON.parse('{"a":"b","b":"\\"}') );输出结果为Object {a: "b", b: ""},也就是说实际显示的数据为一个(实际可输出一个说明在此之前还有一个)

总结,如果想在js对象中出现一个,需要在json字符串中出现四个 。

对于其他的其他的特殊字符

1.双引号("),如果正确出现双引号应为\"

2.n,如果想出现正确的换行需要json字符串中是\n,其实是先对n中的转义,n变成了普通字符,在解析为js对象的时候n与之前的(只有一个了)被解释为换行。如下的两个与此类似

3.r,\r

4.t,\t

JavaScript中json对象和string对象之间相互转化

JSON:JavaScript 对象表示法(JavaScript Object Notation),其实JSON就是一个JavaScript的对象(Object)而已

转换json格式的日期为Javascript对象的函数

项目中碰到了用jQuery从后台获取的json格式的日期的字符串,需要将此字符串转换成JavaScript的日期对象.

解决json日期格式问题的3种方法

开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据

1.在服务器端将日期格式使用Select方法或LINQ表达式转换后发到客户端:

var studentSet = students.Select( 
    p => new { 
        Birthday = p.Birthday.ToString("yyyy-mm-dd") 
    } 
).ToList();

这时候的日期格式就已经变成友好格式了,不过在javascript中这只是一个字符串

2.在javascript中将"Birthday":"/Date(1391141532000)/"中的字符串转换成日期对象,可以将Birthday这个Key所对应的Value中的非数字字符以替换的方式删除,得到一个数字1391141532000,然后实例化一个Date对象,将1391141532000毫秒作为参数,得到一个javascript中的日期对象

$.getJSON("getJson.ashx", function (students) {
    $.each(students, function (index, obj) {
        $("<li/>").html(obj.Name).appendTo("#ulStudents");
        var birthdayMilliseconds = parseInt(obj.Birthday.replace(/\D/igm, ""));//使用正则表达式将生日属性中的非数字(\D)删除,并把得到的毫秒数转换成数字类型
        var birthday = new Date(birthdayMilliseconds);//实例化一个新的日期格式,使用1970 年 1 月 1 日至今的毫秒数为参数
        $("<li/>").html(birthday.toLocaleString()).appendTo("#ulStudents"); ;
    });
 });

3.可以选择第三方的json工具类,其中不乏有一些已经对日期格式问题已处理好了的

目录
相关文章
|
XML JSON JavaScript
Java xml和json互相转换方法
Java xml和json互相转换方法
2191 0
|
JSON Java 数据格式
java中json与list转换方法
java中json与list转换方法
1401 0
java中json与list转换方法
|
6月前
|
JSON Java 数据格式
java里json常见的转换方法
java里json常见的转换方法
168 0
|
Web App开发 JSON JavaScript
javascript 对象属性的添加,删除,json对象和字符串转换方法等
1:动态添加 对象属性 var obj = new Object(); console.log (obj.username); obj.username = "haha"; console.log (obj.username); //undefined //haha 用“[]”表示。
978 0
|
JSON 数据格式 Java
json字符串相关转换方法
/** json转换为Map * @param jsonStr json * @return map集合 */ public static HashMap json2HashMap(String jsonStr) { HashMap data = new HashMap(); ...
786 0
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
1月前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
159 0
在Java中处理JSON数据:Jackson与Gson库比较