我正在尝试将一些javascript拉到一起,以便从我网络上的空调中读取信息。我不是开发人员所以可能会遗漏一些东西,因为我正在使用的代码是从这里和其他地方找到的一些例子。当我将它与一些示例服务器一起使用时,我可以让它工作,而不是使用我的XML。
这是XML:
<?xml version="1.0" encoding="UTF-8" ?>
<iZS10.3>
<request>getSystemData</request>
<mac>001ec0a14c2e</mac>
<authenticated>1</authenticated>
<system>
<type>12</type>
<name>MYAIR3</name>
<MyAppRev>7.4</MyAppRev>
<zoneStationHasUnitControl>4</zoneStationHasUnitControl>
<dhcp>1</dhcp>
<ip>192.168.1.200</ip>
<netmask>255.255.255.0</netmask>
<gateway>192.168.1.1</gateway>
<unitcontrol>
<airconOnOff>1</airconOnOff>
<fanSpeed>3</fanSpeed>
<mode>2</mode>
<unitControlTempsSetting>0</unitControlTempsSetting
<centralActualTemp>20.3</centralActualTemp>
<centralDesiredTemp>24.0</centralDesiredTemp>
<airConErrorCode> </airConErrorCode>
<activationCodeStatus>0</activationCodeStatus
><numberOfZones>8</numberOfZones>
<maxUserTemp>32.0</maxUserTemp>
<minUserTemp>16.0</minUserTemp>
<availableSchedules>8</availableSchedules>
</unitcontrol>
<zs103TechSettings>
<numberofConstantZones>1</numberofConstantZones>
<zsConstantZone1>1</zsConstantZone1>
<zsConstantZone2>0</zsConstantZone2>
<zsConstantZone3>0</zsConstantZone3>
<tempSensorSelect>0</tempSensorSelect>
<returnAirOffset>0.0</returnAirOffset>
<controlZoneNumber>0</controlZoneNumber>
<newAirFitted>0</newAirFitted>
<ACinfo>0</ACinfo>
<systemID>16</systemID>
</zs103TechSettings>
</system>
</iZS10.3>
我的代码:
var options = {
hostname: '192.168.1.200',
port: 80,
path: '/getSystemData',
method: 'GET'
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (systemdata) {
parseString(systemdata,{trim:true,childkey:9,explicitArray:false,explicitChildren:false},
function (err, result) {
var output= (result);
console.dir (output);
console.log(JSON.stringify(result, null, 4));
console.log("End");
});
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
req.end();
你会注意到我的var输出只写在这里以带回结果。如果我这样做,它成功地带回XML输出的第一个节点。如果我试图让它带回一个特定的元素,即
var output= (result.iZS10.3.system.unitcontrol.centralActualtemp);
给出
/Users/Documents/workspace/XML Stream/xml2js.js:43
var output= (result.iZS10.3.system.unitcontrol.centralActualtemp);
^^
SyntaxError: Unexpected number
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
我有没有办法在输出行格式化这个?
如果我只是要求没有节点的结果。
{ 'iZS10.3':
{ request: 'getSystemData',
mac: '001ec0a14c2e',
authenticated: '1',
system:
{ type: '12',
name: 'MYAIR3',
MyAppRev: '7.4',
zoneStationHasUnitControl: '4',
dhcp: '1',
ip: '192.168.1.200',
netmask: '255.255.255.0',
gateway: '192.168.1.1',
unitcontrol: [Object],
zs103TechSettings: [Object] } } }
我的stringify带回了每个级别和属性,没有任何问题。
console.log(JSON.stringify(result, null, 4));
答案 0 :(得分:0)
result.iZS10.3.system
表示以下结构:
result: {
iZS10: {
3: {
system: ...
}
}
}
您可能正在寻找result["iZS10.3"].system
,这意味着以下结构:
result: {
iZS10.3: {
system: ...
}
}
初始方法中的问题是点用于处理嵌套属性,但您的.3
是属性名称的一部分,而不是属性本身。您可以使用如上所示的数组表示法来解决它。