python - 在python中解析json字符串列表
问题描述
使用传入的字符串,如列表:
[{"FECHA":"2019-01-28 13:15:42","SERIAL":2,"LONGITUD":-4.2958984375,"LATITUD":50.4469470596,"ID":1,"VALOR":193,"JOURNEYID":1},
{"FECHA":"2019-01-28 13:15:44","SERIAL":3,"LONGITUD":-4.2958984375,"LATITUD":40.4469470596,"ID":1,"VALOR":34,"JOURNEYID":1},
{"FECHA":"2019-01-28 13:15:46","SERIAL":6,"LONGITUD":-3.2958984375,"LATITUD":50.4469470596,"ID":1,"VALOR":14,"JOURNEYID":1},<..>]
长度为 N 且每个元素具有以下格式:
{"FECHA":"2019-01-28 13:15:42","SERIAL":2,"LONGITUD":-4.2958984375,"LATITUD":50.4469470596,"ID":1,"VALOR":193,"JOURNEYID":1}
我想要的是?
迭代列表并单独处理每个 JSON 元素
first output: {"FECHA":"2019-01-28 13:15:42","SERIAL":2,"LONGITUD":-4.2958984375,"LATITUD":50.4469470596,"ID":1,"VALOR":193,"JOURNEYID":1}
second output: {"FECHA":"2019-01-28 13:15:44","SERIAL":3,"LONGITUD":-4.2958984375,"LATITUD":40.4469470596,"ID":1,"VALOR":34,"JOURNEYID":1}
<...>
如何拆分以获取每个 JSON 元素?
我试过的:
选项1:
def ParseIncomingDataAzure(message):
print ("incoming data: {}".format(message))
x = ast.literal_eval(message)
for frame in x:
print("x: {}".format(frame))
输出:
x: {'LATITUD': 50.4469470596, 'FECHA': '2019-01-28 13:15:42', 'JOURNEYID': 1, 'VALOR': 193, 'SERIAL': 2, 'ID': 1, 'LONGITUD': -4.2958984375}
x: {'LATITUD': 40.4469470596, 'FECHA': '2019-01-28 13:15:44', 'JOURNEYID': 1, 'VALOR': 34, 'SERIAL': 3, 'ID': 1, 'LONGITUD': -4.2958984375}
x: {'LATITUD': 50.4469470596, 'FECHA': '2019-01-28 13:15:46', 'JOURNEYID': 1, 'VALOR': 14, 'SERIAL': 6, 'ID': 1, 'LONGITUD': -3.2958984375}
选项 2:
def ParseIncomingDataAzure(message):
messages = message.split(",")
for frame in messages:
print("x: {}".format(frame))
输出:
x: [{"FECHA":"2019-01-28 13:15:42"
x: "SERIAL":2
x: "LONGITUD":-4.2958984375
x: "LATITUD":50.4469470596
x: "ID":1
x: "VALOR":193
x: "JOURNEYID":1}
x: {"FECHA":"2019-01-28 13:15:44"
x: "SERIAL":3
x: "LONGITUD":-4.2958984375
x: "LATITUD":40.4469470596
x: "ID":1
x: "VALOR":34
x: "JOURNEYID":1}
x: {"FECHA":"2019-01-28 13:15:46"
x: "SERIAL":6
x: "LONGITUD":-3.2958984375
x: "LATITUD":50.4469470596
x: "ID":1
x: "VALOR":14
x: "JOURNEYID":1}]
选项 3:
简单 for 遍历列表
def ParseIncomingDataAzure(message):
for frame in message:
print("x: {}".format(frame))
输出:
x: [
x: {
x: "
x: F
x: E
x: C
x: H
x: A
<....>
可能的解决方案:
def ParseIncomingDataAzure(message):
print ("incoming data: {}".format(message))
x = ast.literal_eval(message)
for frame in x:
print("x: {}".format(json.dumps(frame)))
这是正确的方法吗?
解决方案
考虑为此使用 json 包:
In [2]: import json
In [3]: s = '{"FECHA":"2019-01-28 13:15:42","SERIAL":2,"LONGITUD":-4.2958984375,"LATITUD":50.4469470596,"ID":1,"VALOR":193,"JOURNEYID":1}'
In [4]: json.loads(s)
Out[4]:
{'FECHA': '2019-01-28 13:15:42',
'SERIAL': 2,
'LONGITUD': -4.2958984375,
'LATITUD': 50.4469470596,
'ID': 1,
'VALOR': 193,
'JOURNEYID': 1}
推荐阅读
- django - django rest框架中的嵌套序列化器数据
- vb.net - 从 DataTable 更新 OleDB 表的最简单方法
- google-sheets - 单元格中显示的最大值
- linux - CSV 文件不输出数据对齐不工作
- imagemagick - 将任何常见的图像类型转换为可打印的 dxf
- excel - 自定义 24 小时格式以计算 Excel 中日期之间的差异
- unity3d - 统一着色器中的下标无效
- android - Android onActivityResult() 和 data.getStringExtra() 给出 java.lang.NullPointerException 的问题:
- php - SQL select语句将数据放入输入字段-输入中的“名称”属性不会使用php将数据传输到sql insert语句
- jenkins - 如何将变量从管道传递到詹金斯的工作?