如何快速取JSON里的值

comments={"apple":0,
          "origin":None,
          "data":[{"asd":100,"adj":100,"adv":100}]
          }
a=comments['data']   #取出字典data的值
print(a[0]['asd'])   #取值

输出:100

import json
comments = requests.get('http://comment5.news.sina.com.cn/page/info?version=1&format=js&channel=gn&newsid=comos-fyfzhac1650783')
comments.encoding = 'utf-8'
# print(comments)
jd = json.loads(comments.text.strip('var data=')) #移除改var data=将其变为json数据
print(jd['result']['status']['code'])

输出 4
移除 var data= 是因为在获取时字符串时,前缀是包含var data=,不符合json数据格式,因此转化时需将其从请求内容中移除
在这里插入图片描述

SparkSQL提供了强大的内置JSON函数,可用于高效处理复杂的JSON数据,在Spark中提多层JSON数据key可借助这些函数实现。 在Hadoop生态中,Hive原生支持通过`get_json_object()`函数解析JSON字段,该函数能快速JSON字符串中的指定,虽未直接提及Spark,但思路可借鉴。其语法为`get_json_object(json_string, 'json_path')`,其中`json_string`是JSON格式的字符串字段(需为STRING类型),`json_path`是提路径(支持标准JSONPath语法,如`$.key`或`$.nested_key`),返回为STRING类型,若路径不存在则返回NULL。例如,提根级字段用`$.name`获顶层`name`字段的,嵌套对象访问用`$.address.city`提嵌套对象中的`city`字段,数组索引使用`$.items.price`获数组中第一个元素的`price`字段,通配符匹配用`$.sensors[*].id`遍历数组中所有元素的`id`字段 [^1]。 对于Spark解析复杂JSON(如主表嵌套多个从表,每个从表中又嵌套表,嵌套层级有的在5次以上)的情况,若使用Scala内置的JSON处理包,可能存在解析方法没有继承`serialization`,无法在闭包环境下调用`RDD.map(x=>{ … })`,导致Spark在分发计算任务到executor上时无法序列化对象的问题 [^3]。 另外,在处理JSON数据时,可参考HiveSQL的思路,将含数组的字段进行切分成多行,使用`lateral view`和`explode`进行配合处理 [^4]。 以下是一个使用SparkSQL的示例代码: ```python from pyspark.sql import SparkSession # 创建SparkSession spark = SparkSession.builder.appName("JSONParsing").getOrCreate() # 示例JSON数据 json_data = [ ('{"name": "John", "address": {"city": "New York", "street": "123 Main St"}, "items": [{"price": 10.99}, {"price": 20.99}]}',) ] # 创建DataFrame df = spark.createDataFrame(json_data, ["json_col"]) # 使用get_json_object函数提字段 from pyspark.sql.functions import get_json_object # 提根级字段 df = df.withColumn("name", get_json_object(df["json_col"], "$.name")) # 提嵌套对象字段 df = df.withColumn("city", get_json_object(df["json_col"], "$.address.city")) # 提数组中元素的字段 df = df.withColumn("first_item_price", get_json_object(df["json_col"], "$.items[0].price")) # 显示结果 df.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值