为根元素解析Python中的Json

2024-06-01 00:15:07 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我需要解析的JSON字符串。在

{
  "192.168.1.2_151b3a32-ce00-114a-e000-0004a50c1c6d_stream1" : {
    "@class" : "com.barco.compose.media.transcode.internal.h264.H264Gateway",
    "id" : "192.168.1.2_151b3a32-ce00-114a-e000-0004a50c1c6d_stream1",
    "uri" : {
      "high" : "rtp://239.1.1.2:5006",
      "low" : "rtp://239.1.1.1:5006"
    },
    "owner" : {
      "@class" : "com.barco.compose.media.transcode.Acma",
      "source" : "dvi1-1-mna-1890322558",
      "stream" : "udp://239.1.1.7:5004",
      "type" : "video",
      "resolution" : [ 1, 1 ],
      "framerateDivider" : [ 1, 1 ],
      "profile" : [ "baseline" ],
      "output" : [ "high", "low" ],
      "destination" : [ "", "" ],
      "ipvsProfile" : "high",
      "ipvsSDP" : [ "" ],
      "ipvsTitle" : "DiORStream",
      "ipvsTagName" : [ "" ],
      "ipvsTagValue" : [ "" ],
      "ipvsDescription" : "NMSDesc",
      "ipvsHLS" : true
    },
    "type" : "video"
  },
  "192.168.1.2_151b3a32-ce00-114a-e000-0004a50c1c6d_stream2" : {
    "@class" : "com.barco.compose.media.transcode.internal.h264.H264Gateway",
    "id" : "192.168.1.2_151b3a32-ce00-114a-e000-0004a50c1c6d_stream2",
    "uri" : {
      "high" : "rtp://239.1.1.4:5006",
      "low" : "rtp://239.1.1.3:5006"
    },
    "owner" : {
      "@class" : "com.barco.compose.media.transcode.Acma",
      "source" : "dvi1-1-mna-1890322558",
      "stream" : "udp://239.1.1.7:5004",
      "type" : "video",
      "resolution" : [ 1, 1 ],
      "framerateDivider" : [ 1, 1 ],
      "profile" : [ "baseline" ],
      "output" : [ "high", "low" ],
      "destination" : [ "", "" ],
      "ipvsProfile" : "high",
      "ipvsSDP" : [ "" ],
      "ipvsTitle" : "nikhil",
      "ipvsTagName" : [ "" ],
      "ipvsTagValue" : [ "" ],
      "ipvsDescription" : "nikhilDesc",
      "ipvsHLS" : true
    },
    "type" : "video"
  }
}

现在我想得到“id”的值。我在Python中使用了jsonpath-rw library,但这不起作用。如果我使用*,整个响应都会被打印出来。看来整个反应都是根。我在http://jsonpath.curiousconcept.com/上使用了不同的组合,例如*.id$[0].id。在


Tags: composecomidvideotypemediaclasslow
3条回答

您需要以下表达式:

$..id

证明:

^{pr2}$

但是,使用..运算符时请小心,因为它会进行深度扫描。这意味着,若JSON中有任何其他对象包含id字段,则该字段的值也将添加到查询结果中。在

您的JSON对象包含几个根(或顶部)对象,这些对象的索引键是"192.168.1.2_151b3a32-ce00-114a-e000-0004a50c1c6d_stream1"。从您的问题看来,您想访问这些元素的id字段。为此,简单的方法可能是使用标准库中包含的json模块来加载字符串,然后访问每个元素的id。在

import json
my_json_string = "..."
my_json_dict = json.loads(my_json_string)
for key, value in my_json_dict.items():
    print("Id is {} for item {}".format(value["id"], key))

但是,如果您只需要JSON对象的键,您只需要

^{pr2}$

您没有基/根元素-只有键和值的集合。在

您可以使用如下方法迭代它们:

import json
import pprint

values = json.loads(YOUR_JSON_STRING)

for v in values:
    print v, pprint.pprint(values[v])

这将在生成的JSON对象中打印出以下两个元素(每个元素都有自己的键):

^{pr2}$

相关问题 更多 >