怎样取出JSON字符串数组对象中的某个键名的键值

前言:说白了,用双引号括起来的数组就是字符串数组,也就是我们常见的JSON数据,在我们的实际开发中,很多情况下,后端返回过来的数据都是json数据,所以当我们在使用这些数据的时候,先要把它转换成js对象,再来操作。

首先我们先了解一下什么是JSON数据?

JSON (JavaScript Object Notation) 一种简单的数据格式,比Xml更轻巧。JSON 是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API 或者工具包。JSON的规则很简单:对象是一个无序的“名称/值”对集合。一个对象以"{"(左括号)开始,“}”(右括号)结束。每个"名称"后跟一个":"(冒号);“名称/值”对之间使用","(逗号)分隔。

它是一种严格的JS对象的格式,JSON属性名称必须有双引号,如果值是字符串,也必须是双引号;

JSON数据与JS对象的区别
区别JSONJavaScript
含义仅仅是一种数据格式表示类的实例
传输可以跨平台传输数据,速度快不能传输
表现1、值是以键值对的方式,键名和键值都必须加双引号
2、值不能是方法函数,不能是undefined / NaN
1、值也是键值对方式,键名不加双引号
2、值可以是函数、对象、字符串、数字、boolean等
相互转换JSON转换JS对象
1、JSON.parse(Jsonstr); 不兼容IE7
2、eval("("+Jsonstr+")"); 兼容所有浏览器,但不安全
js对象转换Json
JSON.stringify(jsObj);
其他调用JSON官网的JS,实现parse和stringify在谷歌浏览器的兼容

总而言之,你可以理解JSON是JS下的数据格式,他从属于JS,并且在处理JSON数据时可以直接使用JS内置的API方法;

接下来说正事,我昨天遇到的一个问题

加入后端返回过来的数据如下:

 data:{
	arrList:[{carousel:"[{"url":"http://img.nodebook.jpg"}]"}]
}

从上面代码我们可以知道,返回的是一个 data对象,data对象里面有一个arrList数组,数组里面的值又是以对象的形式存在,对象中有一个carousel属性,carousel属性的值就是 以JSON数据格式存在的。

昨天我想取到url的值,却怎么也取不到,到后来发现是我东西搞错了。
我昨天是这样取的, data.arrList[0].carousel[0].url
到后来才发现,carousel 的属性值并不是一个数组,要经过处理才能取到。

JSON转换为JS数组;
JSON.parse(data.arrList[0].carouse)[0].url 这样才能取到url的值
打印console.log(JSON.parse(data.arrList[0].carouse)[0].url)
打印结果: http://img.nodebook.jpg

附上图片:
转换之前,图片显示不出来
在这里插入图片描述
转换之后
在这里插入图片描述
在这里插入图片描述
现在图片也出来了;

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用JavaJson解析库Jackson或者Gson来解析Json字符串。假设我们要获所有层级key为"param"的值,可以按照以下步骤进行: 1. 将Json字符串转化为JsonNode对象JsonObject对象 ``` // 使用Jackson库将Json字符串转化为JsonNode对象 JsonNode jsonNode = new ObjectMapper().readTree(jsonString); // 使用Gson库将Json字符串转化为JsonObject对象 JsonObject jsonObject = new Gson().fromJson(jsonString, JsonObject.class); ``` 2. 编写递归函数,遍历JsonNode对象JsonObject对象的所有节点,查找key为"param"的值 ``` // 使用Jackson库的JsonNode对象遍历 private void findParamValue(JsonNode node) { if (node.isObject()) { // 如果当前节点是对象 Iterator<String> fieldNames = node.fieldNames(); // 获所有字段 while (fieldNames.hasNext()) { // 遍历所有字段 String fieldName = fieldNames.next(); JsonNode childNode = node.get(fieldName); // 获当前字段对应的节点 if (childNode.isObject() || childNode.isArray()) { // 如果当前节点是对象数组 findParamValue(childNode); // 继续递归遍历 } else if (fieldName.equals("param")) { // 如果当前字段是"param" String paramValue = childNode.asText(); // 获"param"的值 // TODO: 处理"param"的值 } } } else if (node.isArray()) { // 如果当前节点是数组 for (JsonNode childNode : node) { // 遍历数组的所有元素 if (childNode.isObject() || childNode.isArray()) { // 如果当前节点是对象数组 findParamValue(childNode); // 继续递归遍历 } } } } // 使用Gson库的JsonObject对象遍历 private void findParamValue(JsonObject obj) { for (Map.Entry<String, JsonElement> entry : obj.entrySet()) { // 遍历所有键值对 String key = entry.getKey(); JsonElement value = entry.getValue(); if (value.isJsonObject() || value.isJsonArray()) { // 如果当前值是对象数组 findParamValue(value); // 继续递归遍历 } else if (key.equals("param")) { // 如果当前键是"param" String paramValue = value.getAsString(); // 获"param"的值 // TODO: 处理"param"的值 } } } ``` 3. 调用递归函数进行遍历 ``` // 使用Jackson库的JsonNode对象遍历 findParamValue(jsonNode); // 使用Gson库的JsonObject对象遍历 findParamValue(jsonObject); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值