【问题标题】:How access nested JSON node after converting from SOAP?从 SOAP 转换后如何访问嵌套的 JSON 节点?
【发布时间】:2018-02-19 23:51:03
【问题描述】:

使用 node.js(javascript) 如何访问从 SOAP 数据转换而来的 JSON 数据中的 GetDataResult 节点。

{
"s:Envelope": {
    "$": {
        "xmlns:s": "http://schemas.xmlsoap.org/soap/envelope/"
    },
    "s:Body": [{
        "GetDataResponse": [{
            "$": {
                "xmlns": "http://tempuri.org/"
            },
            "GetDataResult": ["You entered: TEST"]
        }]
    }]
  }
}

【问题讨论】:

标签: javascript json soap


【解决方案1】:

使用交互模式测试:

$ node
> var x = {
... "s:Envelope": {
.....     "$": {
.......         "xmlns:s": "http://schemas.xmlsoap.org/soap/envelope/"
.......     },
.....     "s:Body": [{
.......         "GetDataResponse": [{
.........             "$": {
...........                 "xmlns": "http://tempuri.org/"
...........             },
.........             "GetDataResult": ["You entered: TEST"]
.........         }]
.......     }]
.....   }
... }
undefined
> console.log(x["s:Envelope"]["s:Body"][0]["GetDataResponse"][0]["GetDataResult"][0])

输出:

'You entered: TEST'

说明:

我尝试从下面的 cmets 中详细说明。没有容器,我试着解释一下:

你必须把 想成它是什么:一个对象或一个数据结构

中,我们会说它是一个dict,在 中是一个哈希表 等等...在全球范围内,它都是关于关联数组

所以当你在 JSON 中看到时:

"key" : { "value" }

这是一个关联数组

如果你看到了

"key": [
    { "key1": "foo" },
    { "key2": "bar" },
    { "key3": "base" }
]

它是一个哈希数组关联数组数组

当您访问一个没有空格或奇数字符的简单关联数组时,您可以(在 中做:

variable.key

在您的情况下,您的键名中有奇怪的字符 :,因此 x.s:Envelope 不起作用。相反,我们写:x['s:Envelope']

只要您在[] 中有关联数组的数组,您必须告诉js 您需要获取哪个数组编号。它是只有一个关联数组的数组,所以很简单,我们通过传递数组编号来深入数据结构,这就是我们所做的

x['s:Envelope']["s:Body"][0]
                          ^
                          |

【讨论】:

  • 这对我很有用,感谢您抽出时间来回答我的问题。
  • 试着了解发生了什么。
  • 从您的解决方案中,我会说 s:Envelope 是整个容器。我要求 s:body 的第一个值。然后是GetDataResponse 的第一个值。然后是GetDataResult 的第一个值。如果我错了,请随时详细说明。
  • 添加了关于数据结构和如何获取它们的解释
猜你喜欢
  • 1970-01-01
  • 2016-02-13
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
相关资源
最近更新 更多