javaScript Json 转字符串问题,值不一样
在实际项目中,经常遇到字符格式的问题,记下来以便日后方便查看。用到两个函数: *** ON.stringify() 和 *** ON.parse()。
使用ajax向后台请求数据,后台给前端返回数据,明明后端脚本写的是json函数处理后的json格式,但是前端接收数据时,却时而是object,时而是字符串,令人百思不得其解。具体原因我还不是很清楚。
在数据传输过程中,json是以文本,即字符串的形式传递的,而 *** 操作的是 *** ON对象。所以, *** ON对象和 *** ON字符串之间的相互转换是关键
我的解决思路是:首先直接使用返回的数据,如不能达到预期效果,则用typeof查看返回数据的格式是什么或者console.log打印一下看具体返回的数据是什么,然后在根据需要使用函数进行二次处理。
例如:
*** ON字符串:
var str1 = '{ "name": "cxh", "sex": "man" }';
*** ON对象:
var str2 = { "name": "cxh", "sex": "man" };
一、 *** ON字符串转换为 *** ON对象
要使用上面的str1,必须使用下面的 *** 先转化为 *** ON对象:
//由 *** ON字符串转换为 *** ON对象
var obj = eval('(' + str + ')');
或者
var obj = str.parse *** ON(); //由 *** ON字符串转换为 *** ON对象
或者
var obj = *** ON.parse(str); //由 *** ON字符串转换为 *** ON对象
然后,就可以这样读取:
Alert(obj.name);
Alert(obj.sex);
特别注意:如果obj本来就是一个 *** ON对象,那么使用eval()函数转换后(哪怕是多次转换)还是 *** ON对象,但是使用parse *** ON()函数处理后会有问题(抛出语法异常)。
二、可以使用to *** ONString()或者全局 *** *** ON.stringify()将 *** ON对象转化为 *** ON字符串。
例如:
var last=obj.to *** ONString(); //将 *** ON对象转化为 *** ON字符
或者
var last= *** ON.stringify(obj); //将 *** ON对象转化为 *** ON字符
alert(last);
注意:
上面的几个 *** 中,除了eval()函数是js自带的之外,其他的几个 *** 都来自json.js包。新版本的 *** ON 修改了 API,将 *** ON.stringify() 和 *** ON.parse() 两个 *** 都注入到了 Javascript 的内建对象里面,前者变成了 Object.to *** ONString(),而后者变成了 String.parse *** ON()。如果提示找不到to *** ONString()和parse *** ON() *** ,则说明您的json包版本太低。
json解析错误怎么办?
1、先检查json格式是否符合标准,各种转义的地方容易出问题。
2、检查编码是否统一。
3、json的包有没导错。排除了,就是函数调用的问题了- -!看样子传入的是array数据,应该用jsonArray解析。 *** ONArray jsonArray = new *** ONArray(jsonContent.toString());然后可以逐一读取里面的数据: *** ONObject itemObj = jsonArray.get *** ONObject(i)。
*** ON字符串转换 *** ON对象,在 *** 页面转换成功,但是ajax提交json数据,后台解析抛出异常
String jsonStr1 = "{'name':111,'child':'1'}";
String jsonStr2 = "{'name':111,'child':'1'}";
char c1 = jsonStr1.charAt(0);
System.out.println(0+c1);
char c2 = jsonStr2.charAt(0);
System.out.println(0+c2);
我找到原因了,这两个“{”不一样,你肯定是用了另外一个
怎么才能让这个循环圆满遍历完呢 ? json转换的时候是有异常的
先把传递过来的字符串转换成对象,再按照一般思路遍历就可以了。
var jsonObj = eval("("+xmlHttp.responseText+")");//转换为对象for(var i=0;ijsonObj.length;i++){...}
对象里面有啥属性,按照后台的操作正常取出来就可以了。假如对象jsonObj 里面含有后台的Person对象(并且含有属性:private String name;),遍历的时候获取name的话,可以
for(var i=0;ijsonObj.length;i++){ var personName = jsonObj[i].name;}
json解析错误怎么解决?
这个东西是客户端和服务器数据交换的格式,软件一般出现这个错误可以先试一下把 *** 连接方式改一下。 比如可以用WIFI,或者等一会再使用 是在不行就卸载重装。不过如果是手机系统的问题,可以考虑下不用这个软件了,重装太麻烦,你可以去试一下。
*** ON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读,同时也方便了机器进行解析和生成。 *** ON简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构,其可以将JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。
*** ON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使 *** ON成为理想的数据交换语言。
*** ON转换时出现异常
是否引入 json.js库,你再用 Json字符串的方式试试解析一下,var jsonObject=eval('('+strJson+')');