当json.loads()更改null,是的,false,none,true,false?

问题描述 投票:0回答:1

我从URI读取JSON,然后加载到数据框中:

(注意:我只需要名为“结果”的集合)

import requests
import json
from pyspark.sql.functions import from_json, to_json, get_json_object
from pyspark.sql.types import StringType, StructType, StructField, 

schema= StructType([ \
        StructField("id",StringType(),True) \
    ,   StructField("client",StringType(),True) \
])
ss= StructType([ \
        StructField("alias",StringType(),True) \
])

t= requests.get("https://.....")
j= json.loads(t.text)

x= str( j.get("results") )              # THE PROBLEMATIC VARIABLE

k= spark.sparkContext.parallelize( [x] )
df= spark.read.schema(schema).json(k)
df= df. withColumn("client_alias",get_json_object(to_json(from_json("client",ss)),"$.alias"))

df.show()
返回以下内容:

+----+------+------------+ | id|seller|client_alias| +----+------+------------+ |null| null| null| +----+------+------------+
如果我明确设置了这样的变量“ x”,则代码有效:

x= '[{"id":"101","client":{"id":"777","alias":"first"}},{"id":"202","client":{"id":"999","alias":"second"}}]'
输出:

+---+--------------------+------------+ | id| client|client_alias| +---+--------------------+------------+ |101|{"id":"777","alia...| first| |202|{"id":"999","alia...| second| +---+--------------------+------------+
(实际数据当然还有更多的元素,但这表明问题出在数据中,而不是代码中)。

I找到了第一个解决方案:在原始代码中设置X后,请执行以下解决方案 - 一切都有效:

x= x.replace("': None","': null") x= x.replace("': True","': true") x= x.replace("': False","': false")

URI上的实际数据具有
null

trueFalse。请求在不更改数据的情况下检索数据。但是,在这些值之后,这些值转到none

true
false 我找到了第二个解决方案,我认为这是正确的:用这个新的解决方案json.loads()用新的解决方案:x= str( j.get("results") )

所以问题是:为什么
x= json.dumps( j["results"] )
为什么更改

null

true

false
值为nonetruefalse 是另一种更直接的方法吗? json是JavaScript对象符号 - 基于JavaScript对象的数据格式。

无效,true and false都存在于javaScript(和json)中。

json.loads()是一个python函数,可将json转换为python对象(或dict,如在python中称为python)。

没有,是不是,是上述JavaScript原语的python等效物。 null,python中不存在true and false,因此json.loads()需要转换它们。
python json dataframe pyspark
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.