jmespath / jmespath/jmespath.js

Nested querying issue

Open
#100 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
847
Forks
101
PR merge metrics
No merged PRs in 30d

Description

I tested on both Python version and Javascript version on JMSPath webpage, same results:

```
Testing query: users[?id == `1`].contacts[?type == `email`].value | [0]
JSON Data: {
"users": [
{
"id": 1,
"name": "Alice",
"contacts": [
{
"type": "email",
"value": "alice@example.com"
},
{
"type": "phone",
"value": "+1234567890"
}
]
},
{
"id": 2,
"name": "Bob",
"contacts": [
{
"type": "email",
"value": "bob@example.com"
}
]
}
]
}
Debug: JMESPath version: 1.0.1
Debug: Python version: 3.10.16 | packaged by conda-forge | (main, Dec 5 2024, 14:16:10) [GCC 13.3.0]
Debug: Users with id == 1: [{'id': 1, 'name': 'Alice', 'contacts': [{'type': 'email', 'value': 'alice@example.com'}, {'type': 'phone', 'value': '+1234567890'}]}]
Debug: Raw contact objects: [[{'type': 'email', 'value': 'alice@example.com'}, {'type': 'phone', 'value': '+1234567890'}]]
Debug: Flattened contacts: [{'type': 'email', 'value': 'alice@example.com'}, {'type': 'phone', 'value': '+1234567890'}]
Debug: All contact types: ['email', 'phone']
Debug: Raw type values: ['email', 'phone']
Debug: Contacts with type == email: []
Debug: Minimal test: None
Test failed!
Query: users[?id == `1`].contacts[?type == `email`].value | [0]
Expected: alice@example.com
Got: None

Testing query: users[?id == `1`].contacts[][?type == `email`].value | [0]
JSON Data: {
"users": [
{
"id": 1,
"name": "Alice",
"contacts": [
{
"type": "email",
"value": "alice@example.com"
},
{
"type": "phone",
"value": "+1234567890"
}
]
},
{
"id": 2,
"name": "Bob",
"contacts": [
{
"type": "email",
"value": "bob@example.com"
}
]
}
]
}
Debug: JMESPath version: 1.0.1
Debug: Python version: 3.10.16 | packaged by conda-forge | (main, Dec 5 2024, 14:16:10) [GCC 13.3.0]
Debug: Users with id == 1: [{'id': 1, 'name': 'Alice', 'contacts': [{'type': 'email', 'value': 'alice@example.com'}, {'type': 'phone', 'value': '+1234567890'}]}]
Debug: Raw contact objects: [[{'type': 'email', 'value': 'alice@example.com'}, {'type': 'phone', 'value': '+1234567890'}]]
Debug: Flattened contacts: [{'type': 'email', 'value': 'alice@example.com'}, {'type': 'phone', 'value': '+1234567890'}]
Debug: All contact types: ['email', 'phone']
Debug: Raw type values: ['email', 'phone']
Debug: Contacts with type == email: []
Debug: Minimal test: None
Test failed!
Query: users[?id == `1`].contacts[][?type == `email`].value | [0]
Expected: alice@example.com
Got: None

Testing query: users[?id == `1`].contacts[*][?type == `email`].value | [0]
JSON Data: {
"users": [
{
"id": 1,
"name": "Alice",
"contacts": [
{
"type": "email",
"value": "alice@example.com"
},
{
"type": "phone",
"value": "+1234567890"
}
]
},
{
"id": 2,
"name": "Bob",
"contacts": [
{
"type": "email",
"value": "bob@example.com"
}
]
}
]
}
Debug: JMESPath version: 1.0.1
Debug: Python version: 3.10.16 | packaged by conda-forge | (main, Dec 5 2024, 14:16:10) [GCC 13.3.0]
Debug: Users with id == 1: [{'id': 1, 'name': 'Alice', 'contacts': [{'type': 'email', 'value': 'alice@example.com'}, {'type': 'phone', 'value': '+1234567890'}]}]
Debug: Raw contact objects: [[{'type': 'email', 'value': 'alice@example.com'}, {'type': 'phone', 'value': '+1234567890'}]]
Debug: Flattened contacts: [{'type': 'email', 'value': 'alice@example.com'}, {'type': 'phone', 'value': '+1234567890'}]
Debug: All contact types: ['email', 'phone']
Debug: Raw type values: ['email', 'phone']
Debug: Contacts with type == email: []
Debug: Minimal test: None
Test failed!
Query: users[?id == `1`].contacts[*][?type == `email`].value | [0]
Expected: alice@example.com
Got: []

Manual filtering workaround:
Manual result: alice@example.com
```

From JSON above what query should be used to extract ```alice@example.com``` without providing array index in query but rely only on filtering

Contributor guide

No contributing guide indexed for this repository

Research direction

Reproduce the nested-filter queries from the issue in the JMESPath JavaScript implementation and compare their results with the reported Python behavior. Start with the query evaluator and existing filtering tests, if available; done means the expected result and whether the discrepancy is an implementation bug or query-semantics issue are established.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, python
Domain
tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.