无法从JSON访问对象

时间:2022-09-24 23:13:02

I got following JSON object:

我得到了以下JSON对象:

[{"model": "pricing.cashflow", "pk": 1, "fields": {"value": 4.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 2, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 3, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 4, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 5, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 6, "fields": {"value": 5.0, "date": "2016-09-07"}}, {"model": "pricing.cashflow", "pk": 7, "fields": {"value": 3.0, "date": "2016-09-28"}}, {"model": "pricing.cashflow", "pk": 8, "fields": {"value": 3.0, "date": "2016-09-22"}}, {"model": "pricing.cashflow", "pk": 9, "fields": {"value": 5.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 10, "fields": {"value": 5.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 11, "fields": {"value": 4.0, "date": "2016-09-08"}}, {"model": "pricing.cashflow", "pk": 12, "fields": {"value": 8.0, "date": "2016-09-22"}}, {"model": "pricing.cashflow", "pk": 13, "fields": {"value": 3.0, "date": "2016-09-22"}}, {"model": "pricing.cashflow", "pk": 14, "fields": {"value": 5.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 15, "fields": {"value": 8.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 16, "fields": {"value": 4.0, "date": "2016-09-08"}}, {"model": "pricing.cashflow", "pk": 17, "fields": {"value": 5.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 18, "fields": {"value": 5.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 19, "fields": {"value": 5.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 20, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 21, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 22, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 23, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 24, "fields": {"value": 3.0, "date": "2016-09-16"}}]

I want to get the fields "value" and "date". I tried to do it like this (what is the good way normally?) but doesn't work..

我想得到字段“值”和“日期”。我试着这样做(通常什么是好方法?)但不起作用..

$http.get("/getcashflow/")
      .success(function(data) {
            for(var cf in data){
                alert(cf.fields.value.data*);
            }
      });
    };

3 个解决方案

#1


1  

Based on what you are trying to do, you should be using the .forEach() loop, not the for...in loop. Using for...in on an array, will return you the index of each element, which is not useful in your case, unless you want to refer back to the original array by saying data[cf], which defeats the purpose of using a for...in loop in the first place.

根据你要做的事情,你应该使用.forEach()循环,而不是for ... in循环。在数组中使用for ... in会返回每个元素的索引,这在你的情况下是没用的,除非你想通过说数据[cf]来引用回原始数组,这会破坏使用的目的a ... for ... in first first。

var data = [{"model": "pricing.cashflow", "pk": 1, "fields": {"value": 4.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 2, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 3, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 4, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 5, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 6, "fields": {"value": 5.0, "date": "2016-09-07"}}, {"model": "pricing.cashflow", "pk": 7, "fields": {"value": 3.0, "date": "2016-09-28"}}, {"model": "pricing.cashflow", "pk": 8, "fields": {"value": 3.0, "date": "2016-09-22"}}, {"model": "pricing.cashflow", "pk": 9, "fields": {"value": 5.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 10, "fields": {"value": 5.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 11, "fields": {"value": 4.0, "date": "2016-09-08"}}, {"model": "pricing.cashflow", "pk": 12, "fields": {"value": 8.0, "date": "2016-09-22"}}, {"model": "pricing.cashflow", "pk": 13, "fields": {"value": 3.0, "date": "2016-09-22"}}, {"model": "pricing.cashflow", "pk": 14, "fields": {"value": 5.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 15, "fields": {"value": 8.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 16, "fields": {"value": 4.0, "date": "2016-09-08"}}, {"model": "pricing.cashflow", "pk": 17, "fields": {"value": 5.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 18, "fields": {"value": 5.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 19, "fields": {"value": 5.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 20, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 21, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 22, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 23, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 24, "fields": {"value": 3.0, "date": "2016-09-16"}}];

data.forEach(function (cf) {
    console.log(cf.fields.value);
});

#2


1  

And in pure JS (ES6) :

在纯JS(ES6)中:

var input = [
  {"model": "pricing.cashflow", "pk": 1, "fields": {"value": 4.0, "date": "2016-09-09"}},
  {"model": "pricing.cashflow", "pk": 2, "fields": {"value": 3.0, "date": "2016-09-01"}},
  {"model": "pricing.cashflow", "pk": 3, "fields": {"value": 3.0, "date": "2016-09-01"}},
  {"model": "pricing.cashflow", "pk": 4, "fields": {"value": 3.0, "date": "2016-09-01"}}
  ];
input.forEach(item => {console.log("value -> " + item.fields.value + " and date -> " + item.fields.date)}); 

// value -> 4 and date -> 2016-09-09
// value -> 3 and date -> 2016-09-01
// value -> 3 and date -> 2016-09-01
// value -> 3 and date -> 2016-09-01

#3


0  

In javascript, JSON deserializes as an object. To access the members of that object use the dot accessor. In your case the value you are looking for would be accessible as data[cf].fields.value.data

在javascript中,JSON反序列化为对象。要访问该对象的成员,请使用dot访问器。在您的情况下,您要查找的值可以作为数据[cf] .fields.value.data访问

Note that the for in loop returns the keys of the object or array, not the actual values. (for example in the first iteration of the loop, cf is equal to zero, not the first object)

请注意,for in循环返回对象或数组的键,而不是实际值。 (例如在循环的第一次迭代中,cf等于零,而不是第一个对象)

$http.get("/getcashflow/")
      .success(function(data) {
            for(var cf in data){
                alert(data[cf].fields.value.data);
            }
      });
    };

#1


1  

Based on what you are trying to do, you should be using the .forEach() loop, not the for...in loop. Using for...in on an array, will return you the index of each element, which is not useful in your case, unless you want to refer back to the original array by saying data[cf], which defeats the purpose of using a for...in loop in the first place.

根据你要做的事情,你应该使用.forEach()循环,而不是for ... in循环。在数组中使用for ... in会返回每个元素的索引,这在你的情况下是没用的,除非你想通过说数据[cf]来引用回原始数组,这会破坏使用的目的a ... for ... in first first。

var data = [{"model": "pricing.cashflow", "pk": 1, "fields": {"value": 4.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 2, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 3, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 4, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 5, "fields": {"value": 3.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 6, "fields": {"value": 5.0, "date": "2016-09-07"}}, {"model": "pricing.cashflow", "pk": 7, "fields": {"value": 3.0, "date": "2016-09-28"}}, {"model": "pricing.cashflow", "pk": 8, "fields": {"value": 3.0, "date": "2016-09-22"}}, {"model": "pricing.cashflow", "pk": 9, "fields": {"value": 5.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 10, "fields": {"value": 5.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 11, "fields": {"value": 4.0, "date": "2016-09-08"}}, {"model": "pricing.cashflow", "pk": 12, "fields": {"value": 8.0, "date": "2016-09-22"}}, {"model": "pricing.cashflow", "pk": 13, "fields": {"value": 3.0, "date": "2016-09-22"}}, {"model": "pricing.cashflow", "pk": 14, "fields": {"value": 5.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 15, "fields": {"value": 8.0, "date": "2016-09-01"}}, {"model": "pricing.cashflow", "pk": 16, "fields": {"value": 4.0, "date": "2016-09-08"}}, {"model": "pricing.cashflow", "pk": 17, "fields": {"value": 5.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 18, "fields": {"value": 5.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 19, "fields": {"value": 5.0, "date": "2016-09-09"}}, {"model": "pricing.cashflow", "pk": 20, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 21, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 22, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 23, "fields": {"value": 3.0, "date": "2016-09-16"}}, {"model": "pricing.cashflow", "pk": 24, "fields": {"value": 3.0, "date": "2016-09-16"}}];

data.forEach(function (cf) {
    console.log(cf.fields.value);
});

#2


1  

And in pure JS (ES6) :

在纯JS(ES6)中:

var input = [
  {"model": "pricing.cashflow", "pk": 1, "fields": {"value": 4.0, "date": "2016-09-09"}},
  {"model": "pricing.cashflow", "pk": 2, "fields": {"value": 3.0, "date": "2016-09-01"}},
  {"model": "pricing.cashflow", "pk": 3, "fields": {"value": 3.0, "date": "2016-09-01"}},
  {"model": "pricing.cashflow", "pk": 4, "fields": {"value": 3.0, "date": "2016-09-01"}}
  ];
input.forEach(item => {console.log("value -> " + item.fields.value + " and date -> " + item.fields.date)}); 

// value -> 4 and date -> 2016-09-09
// value -> 3 and date -> 2016-09-01
// value -> 3 and date -> 2016-09-01
// value -> 3 and date -> 2016-09-01

#3


0  

In javascript, JSON deserializes as an object. To access the members of that object use the dot accessor. In your case the value you are looking for would be accessible as data[cf].fields.value.data

在javascript中,JSON反序列化为对象。要访问该对象的成员,请使用dot访问器。在您的情况下,您要查找的值可以作为数据[cf] .fields.value.data访问

Note that the for in loop returns the keys of the object or array, not the actual values. (for example in the first iteration of the loop, cf is equal to zero, not the first object)

请注意,for in循环返回对象或数组的键,而不是实际值。 (例如在循环的第一次迭代中,cf等于零,而不是第一个对象)

$http.get("/getcashflow/")
      .success(function(data) {
            for(var cf in data){
                alert(data[cf].fields.value.data);
            }
      });
    };