﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
29504	"JSONField dictionary/object lookup using an ""integer"" key"	Shaheed Haque	nobody	"The documentation on performing queries inside JSONField values [https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/fields/#key-index-and-path-lookups] says:

{{{
If the key is an integer, it will be interpreted as an index lookup in an array:

>>> Dog.objects.filter(data__owner__other_pets__0__name='Fishy')
}}}

Note the specific mention of **array**. While this might be true, it is not the whole truth as applied to **dict/object**. For example, given a **dict/object** whose keys are strings (as always in JSON) but which look like integers:

{{{
  ""employee"": {
    ""415"": {
      ""email"": ""Sherlock.Holmes@acme.co.uk"",
      ""mobile"": ""0700 1234567"",
}}}

how is one supposed to select the **""415""** bit? It turns out that the same syntax as for the array case applies:

{{{
Foo.objects.filter(snapshot__employee__415__mobile='0700 1234567')
}}}

This was not at all obvious to me at least, especially as if the **""415""** is looked up as the final key in the query, the syntax becomes very different:

{{{
Foo.objects.filter(snapshot__employee__has_key='415')
}}}

Since I wasted quite a bit of time on this, I thought it might be useful to strengthen the documentation in this area to clarify how to lookup:

* In arrays and dict/objects
    * if the key is the final term in the query
    * if the key is not the final term in the query





"	Uncategorized	new	Documentation	2.0	Normal				Unreviewed	0	0	0	0	0	1
