前端转换嵌套的json数据报错

一、问题说明

通常情况下,我们遇到的都是比较简单的json格式,如:

{"aa":"11","bb":"22"}

 

我碰到过一个稍微复杂点的json格式,如:

{"params":"{\"name\":\"zhangsan\",\"id\":\"101\",\"token\":\"123456\"}"}

这里说下,我的目标是解析成这种形式 算ok

看到上面这个格式,有人会有疑问,这是标准的json数据格式吗?当然不是,因为前端其实是解析不了的。我为什么要这样表达这个格式呢?因为我造的数据,打印的结果就是这样,我先贴过来,代码如下:

我的前端代码中接到的是下面这样的数据,看上去似乎是正常的json格式,但是依然无法正常解析

二、解决问题

这里要用到commons.lang3里的一个方法:StringEscapeUtils.escapeJson(用来对json字符串进行转义)

回到前面的问题

{\"params\":\"{\\\"name\\\":\\\"zhangsan\\\",\\\"id\\\":\\\"101\\\",\\\"token\\\":\\\"123456\\\"}\"}

我们把转义后的结果放到chrome控制台再试下,发现解析成功了

 

参考链接:https://blog.csdn.net/chenleixing/article/details/43456987

 

附测试数据生成代码:

import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringEscapeUtils;
import java.util.HashMap;
import java.util.Map;

public class MyTest {
	public static void main(String[] args) {
		JSONObject jsonObject = new JSONObject();
		jsonObject.element("id", "101");
		jsonObject.element("name", "zhangsan");
		jsonObject.element("token", "123456");
		Map<String, String> params = new HashMap<>();
		params.put("params", jsonObject.toString());

		String paramStr = JSONObject.fromObject(params).toString();
		System.out.println(paramStr);

		paramStr = StringEscapeUtils.escapeJson(paramStr); // 转义
		System.out.println(paramStr);
	}
}

 

在Python中处理嵌套JSON数据可以通过json和pandas等库实现。 使用json库可以将JSON数据转换为Python对象,然后使用Python的数据处理方式进行操作。json库提供了两个函数——loads和dumps。其中,loads将JSON数据转换为Python对象,dumps将Python对象转换JSON数据。在嵌套JSON数据的情况下,可以使用递归来遍历数据。 使用pandas库可以将JSON数据转换为DataFrame,方便进行数据分析和可视化处理。pandas提供了read_jsonjson_normalize等函数来解析JSON数据。其中,read_json函数将JSON数据转换为DataFrame,json_normalize函数可以展平嵌套JSON数据,方便进行数据分析处理。 例如,一个嵌套JSON数据如下: { "id": 123, "name": "John", "address": { "province": "Guangdong", "city": "Shenzhen", "street": "Futian Road" }, "scores": [ {"subject": "Math", "score": 90}, {"subject": "English", "score": 85}, {"subject": "Chinese", "score": 95} ] } 使用json库可以将其转换为Python对象,并进行操作: import json # 将JSON数据转换为Python对象 json_str = '{ "id": 123, "name": "John", "address": { "province": "Guangdong", "city": "Shenzhen", "street": "Futian Road" }, "scores": [ {"subject": "Math", "score": 90}, {"subject": "English", "score": 85}, {"subject": "Chinese", "score": 95} ] }' data_dict = json.loads(json_str) # 获取属性值 print(data_dict["id"]) print(data_dict["address"]["province"]) print(data_dict["scores"][0]["score"]) 使用pandas库可以将其转换为DataFrame,并进行数据分析和可视化处理: import pandas as pd # 将JSON数据转换为DataFrame data_df = pd.read_json(json_str) # 展示所有数据 print(data_df) # 展开嵌套JSON数据 data_norm = pd.json_normalize(data_dict, record_path=['scores'], meta=['id', 'name', ['address', 'province'], ['address', 'city'], ['address', 'street']]) print(data_norm) 这样就能方便地处理嵌套JSON数据了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值