2016-12-07 101 views
0

字典型我有一组下面的数据:JSON进入蟒蛇

{ 
    "dataFrame": "AB3hqqqpVVVOAAA=", 
    "decrypted": true, 
    "fcnt": 3, 
    "id": 1480528200533, 
    "port": 5, 
    "rssi": -116, 
    "sf_used": 10, 
    "snr": -8.5, 
    "timestamp": "2016-11-30T17:50:00.533Z" 
}, 

{ 
    "dataFrame": "AB3hqqqpVVVOAAA=", 
    "decrypted": true, 
    "fcnt": 5, 
    "id": 1480528235613, 
    "port": 5, 
    "rssi": -119, 
    "sf_used": 10, 
    "snr": -5.8, 
    "timestamp": "2016-11-30T17:50:35.613Z" 
}, 
{ 
    "dataFrame": "AB7hqqqpVVVOAAA=", 
    "decrypted": true, 
    "fcnt": 7, 
    "id": 1480528310609, 
    "port": 5, 
    "rssi": -120, 
    "sf_used": 10, 
    "snr": -8.8, 
    "timestamp": "2016-11-30T17:51:50.609Z" 
}, 
{ 
    "dataFrame": "AB7hqqqpVVVOAAA=", 
    "decrypted": true, 
    "fcnt": 9, 
    "id": 1480528403504, 
    "port": 5, 
    "rssi": -116, 
    "sf_used": 10, 
    "snr": -9.2, 
    "timestamp": "2016-11-30T17:53:23.504Z" 
}, 

我想上述转换成字典类型:

{ 
    u'dataFrame': 'AB3hqqqpVVVOAAA=', 
    u'decrypted': true, 
    u'fcnt': 3, 
    u'id': 1480528200533, 
    u'port': 5, 
    u'rssi': -116, 
    u'sf_used': 10, 
    u'snr': -8.5, 
    u'timestamp': '2016-11-30T17:50:00.533Z' 
} 

所以,当我尝试使用INFILE = JSON .load(infile)infile是我的输入文件,为什么我会像ValueError那样出错:额外的数据?

回答

1

因为您的输入文件是一行中的一些json对象,而不是json对象的列表。解析器将在第一个对象关闭后看到第一个,,并且不知道为什么这个逗号在那里,所以它会产生一个ValueError(这实际上是一个json语法错误)。

通过添加单个[]他们周围像这样使物体成一个列表:

[{ 
    "dataFrame": "AB3hqqqpVVVOAAA=", 
    "decrypted": true, 
    "fcnt": 3, 
    "id": 1480528200533, 
    "port": 5, 
    "rssi": -116, 
    "sf_used": 10, 
    "snr": -8.5, 
    "timestamp": "2016-11-30T17:50:00.533Z" 
}, 

{ 
    "dataFrame": "AB3hqqqpVVVOAAA=", 
    "decrypted": true, 
    "fcnt": 5, 
    "id": 1480528235613, 
    "port": 5, 
    "rssi": -119, 
    "sf_used": 10, 
    "snr": -5.8, 
    "timestamp": "2016-11-30T17:50:35.613Z" 
}, 
{ 
    "dataFrame": "AB7hqqqpVVVOAAA=", 
    "decrypted": true, 
    "fcnt": 7, 
    "id": 1480528310609, 
    "port": 5, 
    "rssi": -120, 
    "sf_used": 10, 
    "snr": -8.8, 
    "timestamp": "2016-11-30T17:51:50.609Z" 
}, 
{ 
    "dataFrame": "AB7hqqqpVVVOAAA=", 
    "decrypted": true, 
    "fcnt": 9, 
    "id": 1480528403504, 
    "port": 5, 
    "rssi": -116, 
    "sf_used": 10, 
    "snr": -9.2, 
    "timestamp": "2016-11-30T17:53:23.504Z" 
}] 
0

一组JSON对象是不是有效的JSON对象本身。

来表示多个对象正确的方法是在一个JSONArray,这是由表示[obj1, obj2, ...., objn]是每个OBJ可表示的JSON对象(像您的类型的字典)