开发者问题收集

从 JSON 调用变量

2017-04-24
1080

我从 XML 文件中读取数据并将其存储在变量 xml 中。

稍后我将其转换为 JSON 格式并将其保存在变量 json 中。

以下是 JSON:

{
  'maven2-moduleset': {
    '$': {
      plugin: '[email protected]'
    },
    actions: [''],
    description: [''],
    keepDependencies: ['false'],
    properties: [
      [Object]
    ],
    scm: [
      [Object]
    ]
  }
}

当我尝试访问

console.log(jason.maven2-moduleset.$.scm)

它抛出了以下错误

events.js:154
      throw er; // Unhandled 'error' event
      ^

ReferenceError: moduleset is not defined
    at /NodeJS/configxml/configxml.js:20:62
    at Parser.<anonymous> (/NodeJS/configxml/node_modules/xml2js/lib/xml2js.js:489:18)
    at emitOne (events.js:90:13)
    at Parser.emit (events.js:182:7)
    at Object.onclosetag (/NodeJS/configxml/node_modules/xml2js/lib/xml2js.js:447:26)
    at emit (/NodeJS/configxml/node_modules/sax/lib/sax.js:640:35)
    at emitNode (/NodeJS/configxml/node_modules/sax/lib/sax.js:645:5)
    at closeTag (/NodeJS/configxml/node_modules/sax/lib/sax.js:905:7)
    at Object.write (/NodeJS/configxml/node_modules/sax/lib/sax.js:1452:13)
    at Parser.exports.Parser.Parser.parseString (/NodeJS/configxml/node_modules/xml2js/lib/xml2js.js:508:31)

我想获取“scm”中的数据,不知道我做错了什么。可以告诉我如何在 scm 对象中显示数据吗?

2个回答

这里有两个问题,但不必担心,因为都很容易修复。

问题 1 - 您不能将点表示法与带符号的键一起使用

相反,您必须使用 [] ,并将键的名称作为字符串放在里面,例如:

无效: console.log(jason.maven2-moduleset)

有效: console.log(jason['maven2-moduleset'])


问题 2 - scm 不是 $

的属性>

$ 只有一个属性,它是 plugin


解决方案

这将起作用: console.log(jason['maven2-moduleset'].scm)

Alicia Sykes
2017-04-24

问题是您尝试使用带有无效字符(破折号)的点符号。要解决此问题,您应该使用数组符号。例如: jason['maven2-moduleset']['$']['scm'] 无论哪种方式,它都会访问相同的值,只是格式略有不同

A JavaScript identifier must start with a letter, underscore (_), or dollar sign ($); subsequent characters can also be digits (0-9). Because JavaScript is case sensitive, letters include the characters "A" through "Z" (uppercase) and the characters "a" through "z" (lowercase). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables

waterfoul
2017-04-24