2017-02-21 26 views
-1

我有一个GET curl命令,它与API对话并返回如下所示的网络列表。我希望能够使用BASH或Python提取这些信息。序列化来自卷曲命令的JSON结果

[ 
     { 
     "id": "L_XXFS", 
     "name": "Terrys_Pizza", 
     "timeZone": "US/Central", 
     }, 
     { 
     "id": "L_52GF", 
     "name": "Clean_Juice", 
     "timeZone": "America/New_York", 
     }, 
     { 
     "id": "L_5999", 
     "name": "JJ_Fish", 
     "timeZone": "US/Central", 
     } 
    ] 

什么是提取每个网络的信息,同时保持组合在一起的信息(为{}每个实例),这样我可以提取/分配变量,做每一个网络上工作的最好方法?

例如,特里披萨id: L_XXFS的价值必定知道它连接到特里比萨饼,而不是其他任何网络。

我每次都会收到不同数量的网络返回的网络,因此无法进行硬编码。

+0

你尝试过什么吗?发布你尝试过的一些代码可以提供帮助。否则,这个问题有点过于宽泛。 – favoretti

+1

如果您在命令行上,我会建议使用https://stedolan.github.io/jq/。 – squiguy

+0

“...并在每个网络上工作”。你几乎肯定希望在Python中做到这一点。除非你可以在*'jq'中完成工作,否则''bash'中实际做的最多的是显示JSON。 – chepner

回答

1

如果您从curl获得输出,我将通过jq(例如,像这样:

curl ... | jq -r '.[]|.name+":"+.id' 
+0

这工作完美。我会补充一点,'jq'能够找到返回中的对象的长度。我用'curl ... | jq -r'。 | length',然后将该值赋给TOTAL_NETWORKS,然后使用curl来遍历网络。 jq -r'。[''$ i''']> networkvalues.txt'在'for'循环中。我通过在文件上使用'sed'来分配值。 – jagdpanzer