Javascript 使用typescript将JSON数据(而不是标题)提取到字符串数组中
我试图做的是从JSON中提取数据,而不是从标题中提取数据(例如,获取1而不是ID,或者获取foo而不是Name) 我只需要数据而不需要标题的原因是数据可以通过动态的方式进行转换。在一次调用中,返回的JSON可能每个对象有100个字段,或者在下一次调用中每个对象有2个字段。这就是为什么在下面的示例中,我的接口中只有一个字符串,因为我不知道可以传递什么样的数据 这是我的typescript,我正试图用它来解释数据Javascript 使用typescript将JSON数据(而不是标题)提取到字符串数组中,javascript,arrays,json,angular,typescript,Javascript,Arrays,Json,Angular,Typescript,我试图做的是从JSON中提取数据,而不是从标题中提取数据(例如,获取1而不是ID,或者获取foo而不是Name) 我只需要数据而不需要标题的原因是数据可以通过动态的方式进行转换。在一次调用中,返回的JSON可能每个对象有100个字段,或者在下一次调用中每个对象有2个字段。这就是为什么在下面的示例中,我的接口中只有一个字符串,因为我不知道可以传递什么样的数据 这是我的typescript,我正试图用它来解释数据 import { Component } from '@angular/core';
import { Component } from '@angular/core';
import { Http } from '@angular/http';
@Component({
selector: 'fetchdata',
template: require('./fetchdata.component.html')
})
export class FetchDataComponent {
public rowData: RowInfo[];
constructor(http: Http) {
http.get('/api/SampleData/DatatableData').subscribe(result => {
//This is where the magic should happen
//This currently does not work
var dataCarrier = result.toString();
JSON.parse(dataCarrier).forEach(item => {
this.rowData = item.name;
});
});
}
}
interface RowInfo {
rowData: string;
}
如何将http中的JSON数据分解。将其分成几部分以传递到接口,同时区分可能位于同一对象中的不同行?ES6方式:这将为您提供一个
数组,其中每个对象包含一个数组。每个子数组将仅为这些对象的值
JSON.parse(dataCarrier).map(Object.values)
因此,在您的示例中,它将导致:
[{ID = 1, Name = "foo", Email = "foo@foo.com"},
{ID = 2, Name = "bar", Email = "bar@bar.com"}]
// =>
[[1, "foo", "foo@foo.com"], [2, "bar", "bar@bar.com"]]
有关对象.值的详细信息
:
如果不能使用ES6
,则可以使用ES5
和对象.keys
。代码将更加冗长,但它完成了任务:
JSON.parse(dataCarrier).map(function(obj) {
return Object.keys(obj).map(function (key) {
return obj[key];
});
});
*改编自当我尝试使用此代码时,它会在Object.values上抛出一个错误。上面说“类型‘ObjectConstructor’上不存在属性‘values’。代码应该可以正常运行:如果您使用的是TypeScript
,则可以将目标更改为ES6
:target:'ES6'
中的tsconfig.json
。如果这不是一个选项,让我知道,我会发布ES5版本,这将是一个更长的时间。或者,如果您已经在使用lodash
或下划线
,则可以将对象.values
替换为。.values
。这可能不是一个选项。该项目是一个带有Angular项目的.NET内核,它生成了几个tsconfig文件。如果你也能发布es5版本,我将不胜感激it@Joris,添加了ES5
版本,以下是更新的小提琴:
JSON.parse(dataCarrier).map(function(obj) {
return Object.keys(obj).map(function (key) {
return obj[key];
});
});