返回值 =》 {addamount=0.00, planned_principal=0.00, product_id=0, plancount=0, repaid_amount=0.00, overdueamount=0.00, planned_interest=0.00, balance_principal=0.00, overpayment=0.00, repaid_interest=0.00, repaycount=0, overduecount=0, addcount=0, feeamount=0.00, name=业主贷, repaid_principal=0.00}
eval,JSON.stringify(), JSON.parse()都不能解析;
一般前端不来处理list 一般在后端返回的时候处理json格式,以java为例 简单方便利用注释@RestController 这样直接返回的是json格式 然后利用前端JSON.stringify(), JSON.parse()来解析
第一种是直接让后台进行json数据的传输,然后后台接收到值 可以用eval()方法来转json,或者ajax请求设置json数据返回,直接调用里面的属性
List数据类型转JSON格式,严格意义上来讲这个转换实在后台进行的,这样有利于前后端数据分离,后期维护也方便一些。没有必要非要放在前端去转,附上后台转换代码:JSONArray listArray=JSONArray.fromObject(list);
如果后台不是你写的叫他去转json。
直接在后台转啊,你这种格式前台转比较麻烦,后台一般由现成的工具可用
解析
var data="{addamount=0.00, planned_principal=0.00, product_id=0, plancount=0, repaid_amount=0.00, overdueamount=0.00, planned_interest=0.00, balance_principal=0.00, overpayment=0.00, repaid_interest=0.00, repaycount=0, overduecount=0, addcount=0, feeamount=0.00, name=业主贷, repaid_principal=0.00}";
var data1=data.replace('{','').replace('}','');
var obj={};
var temparry=data1.split(',');
for(var i =0,len=temparry.length;i<len;i++){
var temparry1=temparry[i].split('=');
obj[temparry1[0].trim()]=temparry1[1].trim();
}
console.log(obj);
ajax接收的时候设置 contentType: "application/json;charset=utf-8;",
如果确认后台返回的是list集合,那么你前台的ajax接收的时候,用上dataType:"json",那么一般情况下,回调函数里接收到的数据,都是json格式(即:前端是array数组的格式),你可以直接打印console.log(回调函数返回的值);如果,使用dataType:"json"接收的时候,报错,则说明,后台返回的参数不符合json协议,让后台去改代码,如果不报错,就是能打印出值来,你可以type of一下看看类型,list集合传过来应该是array数组
后台的返回值不是标准json格式,需要让后台的返回标准的json格式才行.
如果你无法让后台的返回标准的json格式,也可以用js替换成标准的json格式再用JSON.parse()转换成对象。
var str = "{addamount=0.00, planned_principal=0.00, product_id=0, plancount=0, repaid_amount=0.00, overdueamount=0.00, planned_interest=0.00, balance_principal=0.00, overpayment=0.00, repaid_interest=0.00, repaycount=0, overduecount=0, addcount=0, feeamount=0.00, name=业主贷, repaid_principal=0.00}";
str = str.replace(/(\w+)=([^,\{\}]+)/g,'"$1":"$2"');
var obj = JSON.parse(str);
console.log(obj);
JAVA方法:
HttpServletResponse response=ServletActionContext.getResponse();
try{
String result=JSONArray,fromObject(list集合).toString();
response.setContettTye("text/json;charset=utf-8");
response.setHeader("Cache-Control","no-cache");
response.getWriter().write(result);
response.getWriter().flush();
}catch(IOException e){
e.printStackTrace();
System,out.println(e.getMessage());
}
C#方法:
String result=这里拼接JSON字符串
object JSONObj = JsonConvert.SerializeObject(result);
Response.Write(JSONObj);
//一定要加,不然前端接收失败
Response.End();
前台用 :JSON.parse()转换,如果没有设置dataType:"json"的话
手打不易,可能有错别字。。。
var string=JSON.stringify( JSON ) JSON转字符串 ,var json= JSON.parse(STRING) 字符串list 转JSON
看来前端对后台的简介不是随便出来的啊,大兄弟,自己写后台,没有什么大不了的,记得刚入行时有人故意返回了一堆中文数据让我们处理这算哪门子的事嘛
看问题里的内容, 似乎是json的格式其实不是。
json里hash中字段名和值之间是 : 分隔,题目里是 = 。这个数据是后台手工拼出来的吧。
如果后端不能改,只能先做一下字符替换后 再JSON.parse了。 估计还有别的不符合 json格式的地方……
有两种方法实现:
(1)直接转换:
创建JSONArray对象、JSONObject对象,通过put方法将其数据以键值对的形式填充,如例:
//假如有一个Java实体类Person,包括以下属性:phone、sex、married、address。
ArrayList<Person> persons = new ArrayList<Person>();
for (int i = 0; i < 3; i++) {
persons.add(new Person("138******67", "女", true, "北京朝阳区"));//填充Java实体类集合
}
JSONArray array = new JSONArray();// Json格式的数组形式
JSONObject obj;//json格式的单个对象形式
for (int i = 0; i < persons.size(); i++) {
obj = new JSONObject();
//依次填充每一个Java实体对象
try {
obj.put("phone", persons.get(i).getPhone());//json通过put方式以key-value形式填充
obj.put("sex", persons.get(i).getSex());
obj.put("married", persons.get(i).getMarried());
obj.put("address", persons.get(i).getAddress());
array.put(obj);//将JSONObject添加入JSONArray
} catch (JSONException e) {
e.printStackTrace();
}
}
(2)通过GSON工具实现:
只需要创建GSON对象,通过toJson方法转换即可。如例:
//模拟Java数据
Person person = new Person("敏敏", 23, "女", "北京市海淀区");
//创建GSON对象
Gson gson = new Gson();
//调用toJson方法即可转换为字符串的json格式
String json = gson.toJson(person);