python的json库_python:如何使用ijson库解析json数组流

1586010002-jmsa.png

The incoming data resembles the following:

[{

"foo": "bar"

}]

[{

"bar": "baz"

}]

[{

"baz": "foo"

}]

as you see, arrays of objects strung together. JSON-ish

ijson is able to handle the first array, and then I get:

ijson.common.JSONError: Additional data

when it hits the subsequent arrays. How do I get around this?

解决方案

Here's a first cut at the problem that at least has a working regex substitution to turn a full string into valid json. It only works if you're ok with reading the full input stream before parsing as json.

import re

input = ''

for line in inputStream:

input = input + line

# input == '[{"foo": "bar"}][{"bar": "baz"}][{"baz": "foo"}]'

# wrap in [] and put commas between each ][

sanitizedInput = re.sub(r"\]\[", "],[", "[%s]" % input)

# sanitizedInput == '[[{"foo": "bar"}],[{"bar": "baz"}],[{"baz": "foo"}]]'

# then parse sanitizedInput

parsed = json.loads(sanitizedInput)

print parsed #=> [[{u'foo': u'bar'}], [{u'bar': u'baz'}], [{u'baz': u'foo'}]]

Note: since you're read the whole thing as a string, you can use json instead of ijson

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值