【问题标题】:Javascript to read nested Json items用于读取嵌套 Json 项目的 Javascript
【发布时间】:2015-09-23 01:43:38
【问题描述】:

我有一个 JSON,我想使用 Javascript 读取项目内的标题和链接。

{
    "rss": {
        "version": "2.0",
        "content": "http://purl.org/rss/1.0/modules/content/",
        "channel": {
            "title": " National",
            "pubDate": "Mon, 06 Jul 2015 10:56:29 +1000",
            "lastBuildDate": "Mon, 06 Jul 2015 10:56:29 +1000",

            "generator": "news_national_3354",
            "ttl": "5",
            "item": [
                {
                    "title": "Australia’s biggest housing demolition begins",
                    "link": "http://www.news.com.au/lifestyle/health/mr-fluffy-housing-demolitions-begin/story-fneuzlbd-1227430208115?from=public_rss",
                },
                {
                    "title": "Barnaby Joyce pulls out of Q&A",
                    "link": "http://www.news.com.au/national/barnaby-joyce-pulls-out-of-scheduled-qa-appearance/story-fncynjr2-1227429015164?from=public_rss",

                },
                {
                    "title": "Children who murder parents",
                    "link": "http://www.news.com.au/national/crime/one-parent-is-killed-a-month-by-their-child-crime-statistics-reveal/story-fns0kb1g-1227428117585?from=public_rss",

                }


            ]
        }
    }
}

我不想使用 PHP。我正在从不同的域服务器读取 Xmls,我得到了Cross Domain Error。我找到了this 将 xml 转换为 JSON 的解决方案。我能够从不同的域读取 xml 并将其作为 JSON 获取。这个解决方案是否足够高效,可以在实时项目中使用,或者我不应该使用 Javascript 从不同的服务器获取 XML。请在这个问题上给我建议。谢谢

【问题讨论】:

  • JSONP 可能是您正在寻找的应对跨域访问的方法。

标签: javascript jquery json xml cross-domain


【解决方案1】:

“效率”的问题有些争议,因为问题是我们所说的“效率”是什么意思?

通过 XML 获取 JSON 是否更有效?绝对是的。 JSON 根据它的定义更适合 javascript,因为...好吧,让我们看看名称:

javascript 对象国家

同时,在客户端方面几乎没有什么可考虑的。如here 所述,还有更重要的方面需要考虑,即:

a) 使用 HTTP 压缩 b) 查询标记优化

给你another perspective

在我看来,是什么让 JSON 成为许多人的自然选择 应用不是它的内在品质,虽然真实如 在上述文章中进行了演示,但它与 Web 生态系统,因为 JSON 是原生的表示方式 JavaScript 对象树。

这里没有什么要补充的。该问题主要涉及您从哪里获取信息。 Javascript 在客户端运行,因此解析它并将其转换为 JSON 并不是真正的问题。虽然如果直接使用 JSON,您可以删除该解析。但是在这种情况下使用 XML 是完全可以的,事实上这正是它被创建的原因,所以它绝对是一个可行的选择。最后归结为性能和可扩展性对您来说有多重要的问题。如果您从一开始就设置服务以交付 JSON,那么如果您想扩展,对您来说会更容易,因为我认为生成 XML 更困难,更不用说无论如何都需要解析它。但是故意向您展示两种相互矛盾的观点,我可以添加third one,它总结了数据存储方面的差异(如今这很少成为问题,再次仅在大型项目中)并且在其他情况下几乎没有区别:

获胜者:未压缩的 JSON;通过压缩,轻微增益 使用 JSON

但是,如果您没有遇到成千上万的请求和臃肿的客户端 javascript 应用程序,那么它对您来说几乎没有什么不同。即使是这样,压缩它也比选择一个更重要。

我将重复我之前所说的,创建 JSON 和 XML 的目的完全相同——数据序列化。因此,它们完全可以互换,而且绝对都是有效的解决方案。但是,只考虑您的项目将扩展多少,即使如此,这在很大程度上与个人喜好有关。

至于跨域 REST 和类似的东西,请查看 CORS

【讨论】:

  • 感谢您的详细解释。我所说的效率是指“它是否可靠”。如果您查看我的链接,它会显示如何从跨域服务器读取 xml。我担心绕过跨域错误并使其适用于所有浏览器的解决方案。
  • 它和雅虎一样可靠,因为您使用雅虎作为代理。
  • 顺便说一句,您是在自己的服务器上对响应进行“console.log”还是从 YQL 控制台的问题中复制?
  • 不,我做了一个 console.log,我得到了 JSON 格式的 rss
  • 如果你写 console.log(response.rss.channel.item),你得到的只是一个包含项目的数组吗?
【解决方案2】:

您必须首先使用 JSON.parse 将 JSON 转换为 JS 对象:

var obj = JSON.parse(data);

他们可以正常行走在物体中:

var title = obj.rss.channel.title;
var link = obj.rss.content;

【讨论】:

  • 如何遍历item?
  • 我得到了 Uncaught SyntaxError: Unexpected token o 所以我正在使用 var response = JSON.stringify(results.query.results);然后我得到无法读取未定义错误的属性“通道”
【解决方案3】:

将 JSON 响应设置为变量后(以下示例中的 data),您可以解析 JSON,然后像使用任何其他 JavaScript 对象一样使用它。示例:

var response = JSON.parse(data);
var items = response.rss.channel.item;

for (var i = 0; i < items.length; i++) {
  console.log(items[i].title);
  console.log(items[i].link);
}

【讨论】:

  • 我得到了 Uncaught SyntaxError: Unexpected token o 所以我正在使用 var response = JSON.stringify(results.query.results);然后我得到无法读取未定义错误的属性“通道”
【解决方案4】:

如果您收到JSON 数据,则不必转换为JSON,只需读取即可。

var items = data.rss.channel.item;

for (var i = 0; i < items.length; i++) {
  console.log(items[i].title);
  console.log(items[i].link);
}

【讨论】:

  • 我收到一个错误 Uncaught TypeError: Cannot read property 'channel' of undefined
  • 您收到的是 JSON 还是字符串?
  • 字符串变量 obj = JSON.stringify(results.query.results);
猜你喜欢
  • 1970-01-01
  • 2021-04-11
  • 2017-03-28
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2016-09-10
相关资源
最近更新 更多