如何将json创建为unicode或str?

2024-04-19 16:18:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在测试期间,我在json文件中得到了这个json:

{
  "body": "{'streamName': 'someDataTypeStreamName','datasetName': 'acdeventmappingdata','firehoseSampleTimeInterval': 180,'firehoseSampleSize': 128}"
}

我通过我的应用程序获得了以下代码:

if 'body' in event:
    event = event['body']
    if (type(event) is unicode or type(event) is str):
        event = json.loads(event) <<<<------ 

当代码试图运行json.loads(event)时,我得到错误:Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

我尝试了body属性的几种字符串格式,但结果一无所获


Tags: 文件代码ineventjsonifistype
1条回答
网友
1楼 · 发布于 2024-04-19 16:18:50

那不是JSON字符串,那只是dict的字符串表示

>>> print(str({'streamName': 'someDataTypeStreamName','datasetName': 'acdeventmappingdata','firehoseSampleTimeInterval': 180,'firehoseSampleSize': 128}))
{'streamName': 'someDataTypeStreamName', 'datasetName': 'acdeventmappingdata', 'firehoseSampleTimeInterval': 180, 'firehoseSampleSize': 128}

vs

>>> print(json.dumps({'streamName': 'someDataTypeStreamName','datasetName': 'acdeventmappingdata','firehoseSampleTimeInterval': 180,'firehoseSampleSize': 128}))
{"streamName": "someDataTypeStreamName", "datasetName": "acdeventmappingdata", "firehoseSampleTimeInterval": 180, "firehoseSampleSize": 128}

注意不同的引号。困惑,我知道

更新代码以生成有效的,或使用^{}对其进行分析:

>>> ast.literal_eval("{'streamName': 'someDataTypeStreamName','datasetName': 'acdeventmappingdata','firehoseSampleTimeInterval': 180,'firehoseSampleSize': 128}")
{'streamName': 'someDataTypeStreamName', 'datasetName': 'acdeventmappingdata', 'firehoseSampleTimeInterval': 180, 'firehoseSampleSize': 128}

文件需要如下所示才能工作:

{
    "body": "{\"streamName\": \"someDataTypeStreamName\", \"datasetName\": \"acdeventmappingdata\", \"firehoseSampleTimeInterval\": 180, \"firehoseSampleSize\": 128}"
}

这两个部分都需要是有效的JSON才能工作。我是这样创造的。请注意双dumps()

json.dumps({'body': json.dumps({'streamName': 'someDataTypeStreamName','datasetName': 'acdeventmappingdata','firehoseSampleTimeInterval': 180,'firehoseSampleSize': 128})}, indent=4)

相关问题 更多 >