【问题标题】:Change json array response to int array将 json 数组响应更改为 int 数组
【发布时间】:2015-11-15 21:20:01
【问题描述】:

我在将 thingspeak 中的数据转换为 json 响应时遇到了很多麻烦。我有一个 url,它的响应给了我很多字段。这是 JSON 的响应:

?({"channel":{"id":XXXXX,"name":"XXXXX","field1":"Temperature","field2":"Humidity","created_at":"2015-11-03T13:12:06Z","updated_at":"2015-11-15T12:07:37Z","last_entry_id":142},"feeds":[{"created_at":"2015-11-14T21:06:16Z","entry_id":136,"field1":"0"},{"created_at":"2015-11-14T21:06:39Z","entry_id":137,"field1":"25"},{"created_at":"2015-11-14T21:06:59Z","entry_id":138,"field1":"24.05"},{"created_at":"2015-11-14T21:07:13Z","entry_id":139,"field1":"24.45"},{"created_at":"2015-11-14T21:08:16Z","entry_id":140,"field1":"24.45"},{"created_at":"2015-11-15T12:06:18Z","entry_id":141,"field1":"24.5"},{"created_at":"2015-11-15T12:07:37Z","entry_id":142,"field1":"21.4"}]})

我想检索每个 field1 数据的最大值和最小值。我一直在阅读,响应不是 int,因此应该转换为 int 数组。

这是我目前的代码:

$.getJSON('http://api.thingspeak.com/channels/'+channel+'/field/1.json?callback=?',
                {key: read_API_key, days: "1"},
                function(data) {
                    $.each(data.feeds, function() {
                        var temp_vals = this.field1;
                        var temp_vals_date = this.created_at;
                        console.log(temp_vals);
                    });
                }
            );

我想在 feed 数组中搜索 field1 数字并保存到 int 数组中,以便在使用 Math.max.apply(Math, temp_vals); 进行数学运算之后使用控制台,将值正确保存到 temp_vals,但我不能使用该函数,出现以下错误:Function.prototype.apply: Arguments list has wrong type

因此,如何将响应更改为 int 数组或其他能够找到最大值和最小值的东西?另一个快速的问题是,是否有任何方法可以打印 $.each(data.feeds,function(){}); 之外的值,因为我没有找到方法......

更改为 parseInt:

$.getJSON('http://api.thingspeak.com/channels/'+channel+'/field/1.json?callback=?',
                {key: read_API_key, days: "1"},
                function(data) {
                    $.each(data.feeds, function() {
                        var temp_vals = parseInt(this.field1);
                        var temp_vals_date = this.created_at;
                        var temp_max = Math.max.apply(Math, temp_vals);
                        console.log(temp_max);

                        $('#temp1_max').text(temp_max + ' ºC');

                        console.log(temp_vals);
                    });
                }
            );

【问题讨论】:

    标签: javascript jquery arrays json


    【解决方案1】:

    使用parseInt

    var temp_vals = parseInt( this.field1 );
    

    编辑:

    $.getJSON('http://api.thingspeak.com/channels/'+channel+'/field/1.json?callback=?',
                    {key: read_API_key, days: "1"},
                    function(data) {
                     var temp_vals = [];
                        $.each(data.feeds, function() {
                            temp_vals.push( parseInt( this.field1 ) );
                            var temp_vals_date = this.created_at;
                        });
                         var temp_max = Math.max.apply(Math, temp_vals);
                         console.log(temp_max);
                         console.log(temp_vals);
                         $('#temp1_max').text(temp_max + ' ºC');
                    }
                );
    

    【讨论】:

    • 我在做数学函数时仍然遇到同样的问题......我认为问题不在于 int
    • 可能是因为 var temp_vals 正在为每个 data.feeds 条目重新定义变量。在 AJAX 请求之外定义它,然后将结果推送到其中:temp_vals.push( parseInt( this.field1 ) );
    • 它说:Cannot read property 'push' of undefined,并且日志没有显示任何内容。所以我不知道我是否收到了一些价值。我将再次检查以解决此问题。
    • 不使用 push 它可以工作并显示控制台日志中的所有值,但是当我尝试执行数学函数时它不起作用...
    • 我已经通过一些代码更改编辑了答案。现在应该可以工作了。
    猜你喜欢
    • 2017-02-19
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多