Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以使用JSON对象在jq中进行嵌套查询?_Javascript_Json_Jq - Fatal编程技术网

Javascript 是否可以使用JSON对象在jq中进行嵌套查询?

Javascript 是否可以使用JSON对象在jq中进行嵌套查询?,javascript,json,jq,Javascript,Json,Jq,以下是我的JSON: { "A":[ { "AT":"text" }, { "AT":"text2" } ], "B":[ { "name":"text", "power":10 }, { "name":"text1", "power":20 },

以下是我的JSON:

{  
   "A":[  
      {  
         "AT":"text"
      },
      {  
         "AT":"text2"
      }
   ],
   "B":[  
      {  
         "name":"text",
         "power":10
      },
      {  
         "name":"text1",
         "power":20
      },
      {  
         "name":"text2",
         "power":40
      }
   ]
}
我希望所有的B元素都与A元素同名。因此,在这种情况下,结果将是['text',10,'text2',40]。我尝试了此查询[.B[]|[.name、.power][]]|mapin[.A[].AT],但它不起作用,它向我抛出了一个错误:

jq:错误:23:无法使用字符串A索引字符串 退出状态5

我不知道如何修复它,但我认为它与父节点有关,它无法识别in函数中的嵌套查询。那么,是否可以用这种语言进行嵌套查询,以及如何处理其他情况(如其他函数或管道)的嵌套查询问题

PS:我在JAVASCRIPT node.js中工作

新问题,我有以下疑问: .Move | map{.name:{accurity:.url.accurity,damage | class:.url.damage | class.name,power:.url.power,priority:.url.priority,target:.url.target.name,type:.url.type.name,null}}}}添加为$b |。结果|选择.name==bulba | map.url.moves[].Move.name |[,$b[.[].[]

而且它在没有select的情况下可以完美地工作。name==bulba

jq:错误:158:无法使用字符串名称索引数组

我应该用这个来显示JSON吗?因为它比前一个稍微大一点 但首先要做的是:

    {  
   "results":[  
      {  
         "name":"bulba",
         "url":{  
            "moves":[  
               {  
                  "move":{  
                     "name":"flamiche"
                  }
               }
            ]
         }
      },
      {  
         "name":"sala",
         "url":{  
            "moves":[  
               {  
                  "move":{  
                     "name":"DAMSSSS"
                  }
               }
            ]
         }
      }
   ],
   "Move":[  
      {  
         "name":"flamiche",
         "url":{  
            "accuracy":50,
            "damage_class":{  
               "name":"physical"
            },
            "power":50,
            "priority":0,
            "target":{  
               "name":"foe"
            },
            "type":{  
               "name":"fire"
            }
         }
      },
      {  
         "name":"DAMSSSS",
         "url":{  
            "accuracy":90,
            "damage_class":{  
               "name":"status"
            },
            "power":null,
            "priority":2,
            "target":{  
               "name":"self"
            },
            "type":{  
               "name":"grass"
            }
         }
      }
   ]
}
若要获取A上的所有B对象,可以使用Set和concat创建具有所有A值的对象。使用过滤器过滤对象B

var obj={A:[{AT:text},{AT:text2}],B:[{name:text,power:10},{name:text1,power:20},{name:text2,power:40}]} var allAs=新集合[]。concat…obj.A.mapo=>Object.valueso; var result=obj.B.filtero=>allAs.haso.name; console.logresult 您正在将[.B[]|[.name、.power][]]的产品(将是字符串数组)传输到mapin[.A[].AT],即输入已更改且.A已丢失,您正在尝试从这些字符串获取.A[].AT。这不是唯一的问题,也是你犯错误的原因。你最好这样做:

( .B | map({(.name): .power}) | add ) as $b
| .A | map(.AT | [., $b[.]]) | add
如果使用reduce输入太大,则可以获得更好的性能:

( reduce .B[] as $b ({}; . + ($b | {(.name): .power})) ) as $b
| reduce .A[].AT as $a ([]; . + [$a, $b[$a]])
至于第二个问题,通过将结果(一个对象数组)传递给select.name==bulba,正如错误消息所述,您试图用字符串索引数组。要过滤“结果”下的对象,请将“选择”移动到类似地图的位置:


我更喜欢第一个答案,因为我想使用query而不是直接使用js,不过还是要谢谢你!。在|[,$b[.]]与[.AT,$b[.AT]]相同。它创建一个数组,由.AT和在$b中键入.AT的值组成。map定义为def mapf:[.]|f];,它扩展其输入,将过滤器f应用于所有扩展的值,并将结果值打包到一个数组中。看,我找到了办法!!看看这个.B | map{.name:{power:.power,accurity}}}添加为$B |.A | map.at |[,$B[.]]]|添加效果非常好!谢谢!很好,您可以只编写power而不是power:.power.no,select定义为def selectf:if f then。否则为空端;,实际情况是:[.results[]| if.name==bulba then.else空end |.url.moves[].move.name |[,$b[.][]。我们正在扩展结果,过滤一些对象,为每个对象创建一个数组,并将它们全部打包回一个数组。请提供一个最小且完整的JSON文件示例,我们可以将其复制并粘贴到本地文件并处理它。你的例子现在是无效的JSON。我直接发布了我的JSON的simpelst版本,因为我不知道如何为我的JSON创建可链接的复制粘贴。很抱歉,好的,请参阅我的编辑。
map(select(.name == "bulba") | .url.moves[].move.name | [., $b[.][]])