Comments (3)
@nisace thanks for the very thorough report.
I think there's a misalignment between the expectations you have for your particular JSON document and prefix, and how kvitems
works for arbitrary JSON documents and prefixes. Consider the following two cases:
$> echo '[{"b": 1}, {"b": 1}]' | python -m ijson.dump -m kvitems -p item
#: key, value
-------------
0: b, 1
1: b, 1
$> echo '{"a": {"b": 1}, "a": {"b": 1}}' | python -m ijson.dump -m kvitems -p a
#: key, value
-------------
0: b, 1
1: b, 1
The first case is not uncommon, and the second is a bit weirder, in the sense that the input JSON document has duplicate keys -- but possible, as the JSON specification doesn't disallow duplicate keys.
These two examples should hopefully make it clear that kvitems
's behavior should be to traverse the input document until exhaustion, as there's no way for it to know in advance when all matches for a given prefix have been found. Hence this is not really a bug, but a case of wrong expectations.
However....
I do see the opportunity to implement a new option for kvitems
(e.g. stop_after_first
or similar). Using this option, users could indicate that they know the prefix appears only once in the document. The option would default to False
for the reasons explained. When set to True
, kvitems
would behave basically as you describe, yielding the key/value pairs off the prefix the first time around and then exiting.
Thoughts?
from ijson.
@rtobar thanks for your answer. Indeed, I understand your point and agree with the stop_after_first
option as a solution. That would be great !
Not sure how to implement though :)
from ijson.
@rtobar thanks for your answer. Indeed, I understand your point and agree with the
stop_after_first
option as a solution. That would be great !Not sure how to implement though :)
Yeah, I have some ideas but it could take a while. I'll close this ticket and create a new one to keep track of the potential new feature.
from ijson.
Related Issues (20)
- yajl2_c backend crashes on PyPy3 HOT 19
- Is there a way to recursively iterate the key? HOT 4
- ijson.items(file, prefix) waits for EOF HOT 8
- Wheels for Python 3.12 with yajl2_c backend HOT 4
- Include array index HOT 2
- Iterate over more than one prefix? HOT 2
- How to parse a large gzip json file. HOT 2
- Make new release HOT 2
- yajl2_c backend for lambda function HOT 2
- How to use ijson to covert string to dict? HOT 3
- How to read json records in chunks using ijson? HOT 4
- Question: is it possible that returing bytes instead of str could speedup parsing? HOT 3
- Thread safety HOT 9
- Full support for byte stream generator HOT 9
- Allow to use ijson package by a relative import HOT 4
- How can I most-efficiently check for a key in the top-level of a json object? HOT 3
- Python3.12 compilation error: ‘PyGenObject’ has no member named ‘gi_code’ HOT 5
- Is it possible to use isjon with Jsonl, ndjson ? HOT 5
- Memory leak on exception handling with yajl2_c backend HOT 6
- _yajl2 backend broken with Python 3.12 HOT 9
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ijson.