【问题标题】:build json from multiple links, JavaScript从多个链接构建 json,JavaScript
【发布时间】:2016-09-13 11:47:30
【问题描述】:

我有一个像这样的 json 对象

{"test": [{"href": "http://sdfsd.fd"}], "test2": [{"href": "http://sdfsd.fd"}]}

我想要做的是遍历 json 中的所有链接,每个链接都指向另一个 json 对象。然后我想从链接中获取 json,并用那个 json 替换链接,所以它就像这样:

{"test": {somejson}, "test2": {somejson}}

这可以吗?现在我尝试使用嵌套的 for 循环,但循环并不关心 hhtp 请求没有得到响应,然后继续循环,导致不会编辑任何内容。

编辑:

到目前为止,我的代码如下所示:

self.buildJSON = function(json) {
    var links = [];
    for(var post in json){
        // console.log(json[post]['_links']);
        for(var link in json[post]['_links']){
            links.push(json[post]['_links'][link][0]['href']);  
        }
    }
    // var regex = /(http[s]?:\/\/)?([^\/\s]+)(.*)/
    // for(link in links){
    //  var match = regex.exec(links[link]);
    //  var host = match[1]+match[2];
    //  var path = match[3];
    //  links[link] = {"host": host, "path": path};
    // }
    for(link in links){
        request(links[link], function(error, response, body){
            if (!error && response.statusCode == 200) {
                links[link] = body;
            }
        })
    }
    console.log(links);
    fs.writeFile(self.jsonfile, JSON.stringify(json));

类似这样的 Json('_links' 是更大 json 的一部分):

_links: {
self: [
{
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/posts/19"
}
],
collection: [
{
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/posts"
}
],
about: [
{
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/types/post"
}
],
author: [
{
embeddable: true,
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/users/1"
}
],
replies: [
{
embeddable: true,
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/comments?post=19"
}
],
version-history: [
{
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/posts/19/revisions"
}
],
wp:featuredmedia: [
{
embeddable: true,
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/media/130"
}
],
wp:attachment: [
{
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/media?parent=19"
}
],
wp:term: [
{
taxonomy: "category",
embeddable: true,
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/categories?post=19"
},
{
taxonomy: "post_tag",
embeddable: true,
href: "http://wordpress.sutdigselv.dk/wp-json/wp/v2/tags?post=19"
}
],
curies: [
{
name: "wp",
href: "https://api.w.org/{rel}",
templated: true
}
]
}

【问题讨论】:

  • 你的代码在哪里。
  • 测试可以有更多链接,也可以只有一个,因为在这种情况下,您需要合并 json 响应,test: [{href: ""}, {href: ""}] 如果您愿意,我可以帮助您编写代码...
  • @AlexandruOlaru 它只是一个链接 :)
  • 我看到`'wp: term'`有两个链接,也许作为响应你会想要一个jsons数组?
  • @AlexandruOlaru 那也很棒,是的

标签: json node.js request


【解决方案1】:
  1. 您需要先解析 JSON 以获取链接(也许将它们放在一个数组中)。 (提示:使用 JSON.stringify() 会变成可以解析的字符串)

  2. 然后遍历每个数组元素并发送 XHR 请求(提示:XMLHttpRequest 对象)。如果您想“关心”每个响应,请使用 xhttp.open(method,url,false) 和 xhttp.send()。 'false' 表示异步模式已关闭,因此它变为同步模式。现在要注意性能问题,因为它是同步的。阅读更多here

  3. 现在通过将链接存储在字符串中并使用 json.parse(string) 将其转换为 json 来创建您自己的 JSON 对象

【讨论】:

  • 谢谢。我希望它有所帮助。虽然我理解您的情况是在继续之前等待每个请求的响应,但我强烈建议您尝试以异步方式实现您的应用程序。确保您也处理错误响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
相关资源
最近更新 更多