我有一个json,其中对象包含字符串超集的某些子集,例如理想情况下,超集的所有字符串都包含在对象中:
{
"firstName": "foo",
"lastName": "bar",
"age": 20,
"email":"email@example.com"
}
但是,有些对象是这样的:
{
"firstName": "name",
"age": 40,
"email":"email@example.com"
}
仅将超集的每个字符串的对象写入csv的最佳方法是什么?
如果仅是一个字符串为空值的情况,我想我将.dropna与pandas一起使用,它将在csv中省略该行。
我应该估算缺少的字符串,以便每个对象都包含超集,但具有空值吗?如果可以,怎么办?
答案 0 :(得分:1)
如您所建议,读入熊猫数据框应该可以解决问题。使用大熊猫df.read_json()
将为给定json记录中未包含的任何值保留NaN
。因此,尝试:
a = pd.read_json(json_string, orient='records')
a.dropna(inplace=True)
a.to_csv(filename,index=False)
答案 1 :(得分:0)
测试所需的所有值:
x = json.loads(json_string)
if 'firstName' in x and 'lastName' in x and 'age' in x and 'email' in x:
print 'we got all the values'
else
print 'one or more values are missing'
或者,更漂亮的方法:
fields = ['firstName', 'lastName', 'age', 'email']
if all(f in x for f in fields):
print 'we got all the fields'
答案 2 :(得分:0)
假设你有
json_string ='[{ "firstName": "foo", "lastName": "bar", "age": 20, "email":"email@example.com"}, {"firstName": "name", "age": 40,"email":"email@example.com"}]'
那么你可以
l = json.loads(json_string)
df = pd.DataFrame(l)
哪个产量
age email firstName lastName
0 20 email@example.com foo bar
1 40 email@example.com name NaN
然后
>>> df.to_dict('records')
[{'age': 20,
'email': 'email@example.com',
'firstName': 'foo',
'lastName': 'bar'},
{'age': 40,
'email': 'email@example.com',
'firstName': 'name',
'lastName': nan}]
或
>>> df.to_json()
'{"age":{"0":20,"1":40},"email":{"0":"email@example.com","1":"email@example.com"},"firstName":{"0":"foo","1":"name"},"lastName":{"0":"bar","1":null}}'
拥有data frame
的好处是,您可以根据需要解析/处理数据,然后再将其重新设置为字典/ json。