【问题标题】:Using javascript/html to grab one piece of data from JSON result使用 javascript/html 从 JSON 结果中获取一条数据
【发布时间】:2015-09-23 11:07:38
【问题描述】:

在开始之前,我完全是初学者,希望我在提问时没有误用术语。

我开始使用英特尔 XDK 编写一个 HTML5/Javascript 应用程序来从在线 api 查询视频游戏的条形码,我只需要一个 JSON 结果(游戏的标题)然后继续在我的应用中使用。

JSON 结果如下所示:

{"0":{"productname":"The Elder Scrolls V: Skyrim","imageurl":"http://ecx.images-amazon.com/images/I/413Gdr3FzqL._SL160_.jpg","producturl":"","price":"14.00","currency":"USD","saleprice":"","storename":"N/A"},"1":{"productname":"Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41QbF1Vg5KL._SL160_.jpg","producturl":"","price":"18.00","currency":"USD","saleprice":"","storename":"N/A"},"2":{"productname":"Bethesda Softworks Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41X97hqaJwL._SL160_.jpg","producturl":"","price":"23.95","currency":"USD","saleprice":"","storename":"N/A"},"3":{"productname":"BETHESDA SOFTWORKS 11763 / Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41IaEzP-6pL._SL160_.jpg","producturl":"","price":"34.00","currency":"USD","saleprice":"","storename":"N/A"}}

我只想在我的应用中使用第一个“产品名称”条目。

JSON 来自我有帐户的 api 提供程序,因此它位于远程 URL 上,例如,我们将调用 URL:http://JsonIs.here

我希望能够查询 JSON URL 并将“The Elder Scrolls V: Skyrim”作为字符串返回,然后我可以继续在应用程序的其他地方使用它。

我的条形码扫描工作正常,我已经可以创建 GET 请求 URL,我只是不知道从哪里开始调用该 URL,然后返回我需要的一小部分信息。

【问题讨论】:

  • 第一个问题相当令人印象深刻的问题(实际上是最重要的)。但是,下一次,还请添加您已经尝试过获取数据的操作。即使它根本不起作用(这基本上就是你在这里的原因),它表明你已经尝试了一些东西,有时它也可以激发其他人创造新的想法:-)
  • 每个回答的人都应该再次重新阅读这个问题,尤其是最后一段。
  • 谢谢安迪 - 这是我真正的关键问题!我敢肯定,一旦我的应用程序中有数据,我就可以弄清楚如何处理数据,我只是不知道如何正确查询它并将其转换为可用数据?我想我需要从远程 URL 创建一个数组?老实说,我不知道。
  • Stephen:谢谢,我应该说我还没有真正尝试任何东西。我用谷歌搜索了大约 2 个小时,我一直在寻找如何查询代码中已经存在的 JSON 数据的示例,但我似乎找不到如何获取远程 URL,并将其放入可用的格式某种。

标签: javascript jquery json html


【解决方案1】:

您可以为此使用 jQuery 的 $.getJSON。该方法返回一个带有易于理解的 API 的 Promise。

var productName;
$.getJSON('http://JsonIs.here').then(function (data) {
    productName = data[0].productname;
});

这里有几点需要注意。 1) getJSON 是一个异步进程,因此 productName 不会立即可用,因此您可能需要稍微重构代码以解决此问题。例如,您不能这样做:

var productName;
$.getJSON('http://JsonIs.here').then(function (data) {
    productName = data[0].productname;
});
console.log(productName); // undefined

您可能会发现this article 很有用,因为它深入介绍了如何从异步进程返回值。

2) getJSON 会自动解析 JSON,因此您不必这样做,这就是为什么在示例中,我将参数称为 data 而不是 json 以避免混淆。

【讨论】:

  • 啊哈!这看起来像!所以从字面上看是 getJSON 拉它,然后我可以直接查询它而不将它放入任何形式的数组中?然后我有了可以继续使用的 productName 变量!!非常感谢,我会回去玩一会,希望能有满意的结果。
  • 是的。data 是一个有一个键的对象 0 也是一个对象。
  • 我想我也可以调用 data[3].productname 来进一步了解 JSON 结果?只是为了确保我遵循它的工作原理 - 而不是我真正需要的。
  • @Andy 如果我确实解决了这个问题,你能否检查我更新的答案是否有可能为我自己获取产品名称的价值
  • @Andy - 你的代码很完美。我现在有一个按钮,我点击它会启动条形码扫描仪,在页面上返回条形码编号并在页面上返回游戏名称!
【解决方案2】:

模拟您获取 JSON

var getJSON = function(){
     return '{"0":{"productname":"The Elder Scrolls V: Skyrim","imageurl":"http://ecx.images-amazon.com/images/I/413Gdr3FzqL._SL160_.jpg","producturl":"","price":"14.00","currency":"USD","saleprice":"","storename":"N/A"},"1":{"productname":"Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41QbF1Vg5KL._SL160_.jpg","producturl":"","price":"18.00","currency":"USD","saleprice":"","storename":"N/A"},"2":{"productname":"Bethesda Softworks Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41X97hqaJwL._SL160_.jpg","producturl":"","price":"23.95","currency":"USD","saleprice":"","storename":"N/A"},"3":{"productname":"BETHESDA SOFTWORKS 11763 / Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41IaEzP-6pL._SL160_.jpg","producturl":"","price":"34.00","currency":"USD","saleprice":"","storename":"N/A"}}';

};

获取 JSON 并创建包含所有产品名称的数组的函数

var getProductName = function(){
    // get the JSON_string ;)
    var JSON_string = getJSON();

    // convert it to an obj.
    var JSON_obj = JSON.parse(JSON_string);

    //create something to store your data in, you don't need to do this ofcourse
    var r_productNames = [];

    for(var key in JSON_obj){
        if(JSON_obj.hasOwnProperty(key)){
            r_productNames.push(JSON_obj[key].productname);
       }
    }

    // et voila, you have an array of all the productnames, returned by your request.
   console.log(r_productNames);

};

它对我有用;)

【讨论】:

    【解决方案3】:

    Json 带有一个键值对,索引从 0 开始。因此 json[0] 表示第一个索引中的 json。 json[0].productname 这里的productnamekey,它会返回值

    var json = {"0":{"productname":"The Elder Scrolls V: Skyrim","imageurl":"http://ecx.images-amazon.com/images/I/413Gdr3FzqL._SL160_.jpg","producturl":"","price":"14.00","currency":"USD","saleprice":"","storename":"N/A"},"1":{"productname":"Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41QbF1Vg5KL._SL160_.jpg","producturl":"","price":"18.00","currency":"USD","saleprice":"","storename":"N/A"},"2":{"productname":"Bethesda Softworks Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41X97hqaJwL._SL160_.jpg","producturl":"","price":"23.95","currency":"USD","saleprice":"","storename":"N/A"},"3":{"productname":"BETHESDA SOFTWORKS 11763 / Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41IaEzP-6pL._SL160_.jpg","producturl":"","price":"34.00","currency":"USD","saleprice":"","storename":"N/A"}}
    alert(json[0].productname);
    

    【讨论】:

    • 您好,感谢您的关注。但我首先如何查询 JSON 结果。我有一个将我带到远程 JSON 结果的 URL,但我不知道如何将该信息提取到我的代码中然后查询它...如果您关注?
    【解决方案4】:

    尝试使用 ajax

    $.ajax({
        type: 'GET',
        url: 'http://JsonIs.here',
        dataType: "json",
        success: function(data) {
            console.log(data[0].productname)
        },
        error: function(data) {
    
        }
    
    
    });
    

    使用ajax可以尝试从url获取数据,可以在请求成功时获取数据

    【讨论】:

    • 投了反对票,因为您没有提供任何解释。粘贴一段代码并不是一个好的答案,即使在技术上是正确的。
    • @StephanBijzitter 我认为没有必要,因为我提供了一个小提琴,但我现在做了解释
    • 你还没有回答这个问题。
    • @Andy 感谢您的检查和建议,我感谢您的评论 :) 快乐编码
    【解决方案5】:

    给你。但是,我发现 "0" 是您的 JSON 回复中的关键,直到今天才出现。最好从一个字符开始。

    您的JSON 响应只有一个对象。您可以通过索引访问对象中的元素。在0th 索引上,您有您的数据。我们以 a[0].key 访问它的原因,其中 key 表示您要从对象访问的键的名称。

    这是您从JSON 获取数据并在您的应用程序中使用它以根据您的问题实现其余功能的方式。

    var a = {"0":{"productname":"The Elder Scrolls V: Skyrim","imageurl":"http://ecx.images-amazon.com/images/I/413Gdr3FzqL._SL160_.jpg","producturl":"","price":"14.00","currency":"USD","saleprice":"","storename":"N/A"},"1":{"productname":"Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41QbF1Vg5KL._SL160_.jpg","producturl":"","price":"18.00","currency":"USD","saleprice":"","storename":"N/A"},"2":{"productname":"Bethesda Softworks Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41X97hqaJwL._SL160_.jpg","producturl":"","price":"23.95","currency":"USD","saleprice":"","storename":"N/A"},"3":{"productname":"BETHESDA SOFTWORKS 11763 / Skyrim X360","imageurl":"http://ecx.images-amazon.com/images/I/41IaEzP-6pL._SL160_.jpg","producturl":"","price":"34.00","currency":"USD","saleprice":"","storename":"N/A"}}
    
    a[0].productname;
    

    【讨论】:

    • 投了反对票,因为您没有提供任何解释。粘贴一段代码并不是一个好的答案,即使在技术上是正确的。
    • 因为你还没有回答问题。
    • 只要在锁定我的投票的时限内,当然:-)
    • @Andy 你能告诉我我怎么没有回答这个问题。
    • 最后一段。老实说我一开始也没认出来I've got my barcode scanning working, I can create the GET request URL already, I just don't know where to start calling that URL and then returning the small piece of information I need.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多