【问题标题】:How to get specific attribute inside a tag of javascript object?如何获取javascript对象标签内的特定属性?
【发布时间】:2021-09-12 07:49:24
【问题描述】:

所以我有这个 XML :

<enclosure length="25000" type="image/jpeg" url="https://www.hellothere.com/something.jpg"/>

我已经将它转换为这样的 javascript 对象:

{
 title: (1) ["something"],
 enclosure: (1) [{...}]
}

我在调试的时候已经看过了,值在那里,而它是undefined,每次我尝试访问它时。

当我做console.log(JSON.stringify(data, null, 2)) 它返回这个结果:

"enclosure": [
      {
        "$": {
          "length": "25000",
          "type": "image/jpeg",
          "url": "https://hellothere.com/something.jpg"  
        }
      }
    ]

但是当我做 console.log(data) 时,它会返回 undefined

如果我们拉伸它:

data :
 > title: (1) ['something here']
 > enclosure: (1) [{...}]
   > 0: {$: {...}}
    > $: {length='25000',type='image/jpeg',url='https://www.hellothere.com/something.jpg'}
      length: '25000'
      type: 'image/jpeg'
      url: 'https://www.hellothere.com/something.jpg'

在 python 中,我尝试使用 data['enclosure']['@url'] 之类的东西,它可以工作。 我试过了:

> data['enclosure'][0]['url']
> data['enclosure']['@url']
> data['enclosure']['$url']

但没有任何效果。 如何在该 enclosure 标记中获取 url 的值?谢谢

编辑:

代码:

index.js

app.get('/', (req, res) => {
 getJson.produce_data(url_source.url, function (err, data) {
  data = data["rss"]["channel"][0]["item"];
   if (err) {
     return console.error(err);
   }
   res.render('json_results', {title: 'NEWS TODAY', data_in: data});
 });
});

produce_data 函数:

function produce_data(url, callback) {
    var req = https.get(url, function(res) {
        var currentData = '';

        res.on('data', function(chunk) {
            currentData += chunk;
        })

        res.on('error', function(err) {
            callback(err, null);
        })

        res.on('timeout', function(err) {
            callback(err, null);
        })

        res.on('end', function() {
            parsedtext(currentData , function(err, result) {
                callback(null, result);
            })
        });
    });
}

这些是该过程中涉及的代码行。

截图:

这是调试模式下包含的数据:

【问题讨论】:

  • 请发布演示问题的代码,例如一个对象文字示例,无论您“已经将其转换为 javascript 对象”是什么。上面的代码都不是有效的 javascript。 ['enclosure'][0] 是一个包含一个元素的数组字面量,即字符串“enclosure”。 ['enclosure'][0] 返回字符串 'enclosure',然后 'enclosure'['url'] 返回 undefined(除非您使用 url 属性扩展了 String.prototype )。
  • 请检查上面编辑的信息。

标签: javascript node.js json xml express


【解决方案1】:

从看起来像控制台检查的内容重建对象并应用以下规则:

  1. 对象道具由点和道具名称引用
  2. 数组元素由方括号和索引引用

所以...

let data = {
  title: ['something here'],
  enclosure: [{
    $: {
      length: '25000',
      type: 'image/jpeg',
      url: 'https://www.hellothere.com/something.jpg'
    }
  }]
}

console.log(data.enclosure[0].$.url)

【讨论】:

  • data.enclosure[0].$.urldata['enclosure'][0]['$']['url'] 相同,但它不起作用。仍然遇到同样的错误
【解决方案2】:

您的附件属性是一个数组,因此您必须通过索引来引用它:

let xml_obj = {
 title: ["something"],
 enclosure: [{
    length:'25000',type:'mage/jpeg',url:'https://www.hellothere.com/something.jpg'
 }]
}
//in this case there is one element so the index is zero!
alert(xml_obj.enclosure[0].url)

这是在 JavaScript 中,您的项目中似乎同时使用了 JS 和 Python。

【讨论】:

  • 我已经尝试过了,请参考我上面的尝试。这个xml_obj.enclosure[0].urldata['enclosure'][0]['url'] 是一样的(我之前试过这个)。我也尝试了你的建议,但仍然遇到同样的错误。是的,虽然它在 Python 上运行,但我似乎无法使用 JavaScript。
  • data[0].enclosure[0].$.url?
  • 不,因为 $ 不被视为字符串。我也很困惑为什么会这样。我已经在下面解释了我的答案并解决了它。
【解决方案3】:

OP 没有包含足够的实际代码来确定您在做什么,因此以下是猜测。

您可以turn the XML into a document,然后使用DOM方法访问节点和属性,例如

let xml = '<enclosure length="25000" type="image/jpeg" url="https://www.hellothere.com/something.jpg"/>';

let doc = new DOMParser().parseFromString(xml, 'application/xml');
let enclosures = doc.getElementsByTagName('enclosure');

for (let i=0, iLen=enclosures.length; i<iLen; i++) {
  console.log(`Node ${i} url: ${enclosures[i].getAttribute('url')}`);
}

【讨论】:

  • 我已经编辑了上面的信息。请参考以上内容。
【解决方案4】:

好的,这个问题已经结束。我已经找到了。 原来我只需要添加'$',因为这个符号 -> $ 在某种程度上表现得像一个指针(?)。我没有修改 XML 的内容,并且 $ 是自己添加的。 所以它不是一个字符串。

如果是字符串,上面提供的解决方案已经解决了,但是没有。

由于我的数据在一个数组中,这行代码有效:

data[sequence]['enclosure'][0]['\$']['url']

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多