我正在尝试创建JSON数据以传递给InfluxDB。我使用字符串创建它但我得到错误。我究竟做错了什么。我正在使用各种帖子中建议的json.dumps。
这是基本的Python代码:
json_body = "[{'points':["
json_body += "['appx', 1, 10, 0]"
json_body += "], 'name': 'WS1', 'columns': ['RName', 'RIn', 'SIn', 'OIn']}]"
print("Write points: {0}".format(json_body))
client.write_points(json.dumps(json_body))
我得到的输出是
Write points: [{'points':[['appx', 1, 10, 0]], 'name': 'WS1', 'columns': ['RName', 'RIn', 'SIn', 'OIn']}]
Traceback (most recent call last):
line 127, in main
client.write_points(json.dumps(json_body))
File "/usr/local/lib/python2.7/dist-packages/influxdb/client.py", line 173, in write_points
return self.write_points_with_precision(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/influxdb/client.py", line 197, in write_points_with_precision
status_code=200
File "/usr/local/lib/python2.7/dist-packages/influxdb/client.py", line 127, in request
raise error
influxdb.client.InfluxDBClientError
我也试过双引号但是得到了同样的错误。这是存根代码(为了最小化解决方案),我在示例中意识到点列表只包含一个列表对象,但实际上它包含多个。我正在通过各种API调用的输出生成JSON代码。
json_body = '[{\"points\":['
json_body += '[\"appx\", 1, 10, 0]'
json_body += '], \"name\": \"WS1\", \"columns\": [\"RName\", \"RIn\", \"SIn\", \"OIn\"]}]'
print("Write points: {0}".format(json_body))
client.write_points(json.dumps(json_body))
我明白如果我使用下面的东西会起作用:
json_body = [{ "points": [["appx", 1, 10, 0]], "name": "WS1", "columns": ["Rname", "RIn", "SIn", "OIn"]}]
答案 0 :(得分:1)
您不需要手动创建JSON。只需将适当的Python结构传递给write_points
函数即可。尝试类似的东西:
data = [{'points':[['appx', 1, 10, 0]],
'name': 'WS1',
'columns': ['RName', 'RIn', 'SIn', 'OIn']}]
client.write_points(data)
答案 1 :(得分:0)
请访问JSON.org以获取正确的JSON结构。我可以看到你自己生成的JSON有几个错误:
{}
括起来,也可以是括号[]
括起来的有序数组。不要同时使用两者。由于您的数据结构类似于dict,因此花括号是合适的。"This is valid JSON"
。 'This is not valid'
。'points'
值数组被双括号包围,这是不必要的。只使用一套。请查看documentation of the json
module以了解有关如何使用它的详细信息。基本上,您可以提供json.dumps()
Python数据结构,并将其输出为有效的JSON。
In [1]: my_data = {'points': ["appx", 1, 10, 0], 'name': "WS1", 'columns': ["RName", "RIn", "SIn", "OIn"]}
In [2]: my_data
Out[2]: {'points': ['appx', 1, 10, 0], 'name': 'WS1', 'columns': ['RName', 'RIn', 'SIn', 'OIn']}
In [3]: import json
In [4]: json.dumps(my_data)
Out[4]: '{"points": ["appx", 1, 10, 0], "name": "WS1", "columns": ["RName", "RIn", "SIn", "OIn"]}'
你会注意到首先使用Python数据结构的价值:因为它是Python,你不需要担心单引号和双引号,json.dumps()
会自动转换它们。但是,构建带有嵌入单引号的字符串会导致:
In [5]: op_json = "[{'points':[['appx', 1, 10, 0]], 'name': 'WS1', 'columns': ['RName', 'RIn', 'SIn', 'OIn']}]"
In [6]: json.dumps(op_json)
Out[6]: '"[{\'points\':[[\'appx\', 1, 10, 0]], \'name\': \'WS1\', \'columns\': [\'RName\', \'RIn\', \'SIn\', \'OIn\']}]"'
因为您将字符串提供给json.dumps()
,而不是数据结构。
所以下次,不要尝试自己构建JSON,依靠专用模块来完成它。