Skip to content

query returns to may hits despite predicate on parent element #28

@GoogleCodeExporter

Description

@GoogleCodeExporter
Hi Stefan

I have now find the correct place for Jsonpath issues!

I have posted a mini demo here:

https://github.com/sailfishapps/ThrowawayDemos/blob/master/Kaputt/JsonDBDemo

This runs on Sailfish using Qt QML / Javascript

The json file has 3 entities / elements, landed, area and template. Landed is 
the root, and template is a child of area.

The json file has 3 areas, each with 2 child templates.

If I apply the following query:

$.landed.area[?(@.id = 1)].template[*]

I expect to get only the templates that belong to the area with id 1. (i.e. 2 
hits)

Instead I get all templates of all areas. (i.e. 6 hits)

I am running jsonpath 0.8.5

As a first step to understanding what your code is doing, I have added some 
console.log calls to the trace function.

The output shows that template is being processed 3 times (once for each area). 
I expect it to be processed only once due to the predicate on area.

Grüsse

Chris

christopher.lamb@ch.ibm.com

//start json file
{
   "landed":{
      "area":[
         {
            "id":1,
            "name":"South Africa",
            "template":[
               {
                  "id":1,
                  "name":"DefaultOKMsg"
               },
               {
                  "id":2,
                  "name":"DefaultNotOKMsg"
               }
            ]
         },
         {
            "id":3,
            "name":"Schweiz",
            "template":[
               {
                  "id":1,
                  "name":"DefaultOKMsg"
               },
               {
                  "id":2,
                  "name":"DefaultNotOKMsg"
               }
            ]
         },
         {
            "id":4,
            "name":"Italia",
            "template":[
               {
                  "id":1,
                  "name":"DefaultOKMsg"
               },
               {
                  "id":2,
                  "name":"DefaultNotOKMsg"
               }
            ]
         }
      ]
   }
}
//end json file

//start console. log output
[D] getTemplates:50 - getting Templates for area: undefined
[D] parseJSONString:12 - about to pass DB to JSONPath
[D] P.trace:33 - trace: expr:landed;area;?(@.id = 1);template;*
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$
[D] P.trace:33 - trace: expr:area;?(@.id = 1);template;*
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed
[D] P.trace:33 - trace: expr:?(@.id = 1);template;*
[D] P.trace:34 - trace: val:[object Object],[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area
[D] P.trace:33 - trace: expr:0;template;*
[D] P.trace:34 - trace: val:[object Object],[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area
[D] P.trace:33 - trace: expr:template;*
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed;area;0
[D] P.trace:33 - trace: expr:*
[D] P.trace:34 - trace: val:[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area;0;template
[D] P.trace:33 - trace: expr:0;
[D] P.trace:34 - trace: val:[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area;0;template
[D] P.trace:33 - trace: expr:
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed;area;0;template;0
[D] P.trace:33 - trace: expr:1;
[D] P.trace:34 - trace: val:[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area;0;template
[D] P.trace:33 - trace: expr:
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed;area;0;template;1
[D] P.trace:33 - trace: expr:1;template;*
[D] P.trace:34 - trace: val:[object Object],[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area
[D] P.trace:33 - trace: expr:template;*
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed;area;1
[D] P.trace:33 - trace: expr:*
[D] P.trace:34 - trace: val:[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area;1;template
[D] P.trace:33 - trace: expr:0;
[D] P.trace:34 - trace: val:[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area;1;template
[D] P.trace:33 - trace: expr:
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed;area;1;template;0
[D] P.trace:33 - trace: expr:1;
[D] P.trace:34 - trace: val:[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area;1;template
[D] P.trace:33 - trace: expr:
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed;area;1;template;1
[D] P.trace:33 - trace: expr:2;template;*
[D] P.trace:34 - trace: val:[object Object],[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area
[D] P.trace:33 - trace: expr:template;*
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed;area;2
[D] P.trace:33 - trace: expr:*
[D] P.trace:34 - trace: val:[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area;2;template
[D] P.trace:33 - trace: expr:0;
[D] P.trace:34 - trace: val:[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area;2;template
[D] P.trace:33 - trace: expr:
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed;area;2;template;0
[D] P.trace:33 - trace: expr:1;
[D] P.trace:34 - trace: val:[object Object],[object Object]
[D] P.trace:35 - trace: path:$;landed;area;2;template
[D] P.trace:33 - trace: expr:
[D] P.trace:34 - trace: val:[object Object]
[D] P.trace:35 - trace: path:$;landed;area;2;template;1
[D] parseJSONString:14 - readDataModel.js: objectArray.length: 6
//end console.log output






Original issue reported on code.google.com by flyingsh...@gmail.com on 10 Feb 2014 at 9:55

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions