![](/img/trans.png)
[英]angular 2 - how do I iterate through a JSON response that contains an object which contains an array of objects?
[英]How do I convert an object which stores JSON data into an array in Angular?
我目前想使用tensorflow.js创建一个机器学习模型,但遇到了问题。
我将JSON内容保存在本地对象中,但是要在机器学习模型中使用它,我需要将其转换为数组。
我有一个名为guru
的对象,该对象具有我的json对象数组,但是要在tensorflow.js中使用它,我需要一个像这样的数组:
weather [ [1,2,3],[3,2,1],...[] ];
这是我的角度组件代码:
export class DisplayjasonComponent implements OnInit {
public guru: {}; //local object
constructor(private http: HttpClient) {
var obj;
this.getJSON().subscribe(data => obj = data, error => console.log(error));
}
linearModel: tf.Sequential;
predection: any;
ngOnInit() {
this.getJSON().subscribe(data => {
this.guru = data; //saving json into local object
});
this.trainModel();
}
private _url: string = "/assets/myjson.json";
public getJSON(): Observable<any> {
return this.http.get(this._url);
}
async trainModel() {
this.linearModel = tf.sequential();
this.linearModel.add(tf.layers.dense({ units: 5, inputShape: [3] }));
this.linearModel.add(tf.layers.dense({ units: 2 }));
this.linearModel.compile({ loss: 'meanSquaredError', optimizer: 'sgd' });
const xs = tf.tensor2d([
[1, 2, 3], //this is where I need to use the array
[3, 2, 1]
]);
const ys = tf.tensor2d([
[1, 0],
[0, 1]
]);
await this.linearModel.fit(xs, ys)
const p = this.linearModel.predict(tf.tensor2d([[1, 2, 3]])) as any;
this.predection = Array.from(p.dataSync());
console.log(this.predection);
}
}
这是我的JSON文件:
{
"weather": [
{
"temprature": 23,
"precipitation": 2,
"humidity": 57,
"weather": 0
},
{
"temprature": 20,
"precipitation": 100,
"humidity": 87,
"weather": 1
},
{
"temprature": 32,
"precipitation": 5,
"humidity": 70,
"weather": 0
},
{
"temprature": 18,
"precipitation": 87,
"humidity": 93,
"weather": 1
},
{
"temprature": 28,
"precipitation": 0,
"humidity": 37,
"weather": 0
},
{
"temprature": 13,
"precipitation": 94,
"humidity": 93,
"weather": 1
},
{
"temprature": 25,
"precipitation": 4,
"humidity": 43,
"weather": 0
},
{
"temprature": 20,
"precipitation": 68,
"humidity": 98,
"weather": 1
},
{
"temprature": 26,
"precipitation": 0,
"humidity": 9,
"weather": 0
},
{
"temprature": 13,
"precipitation": 100,
"humidity": 98,
"weather": 1
}
]
}
我不确定您希望输出数据是什么样子,但是可以尝试一下。
您实际上可以单行执行此操作:
data.weather.map(Object.values);
.map
函数用于转换数组,而Object.values
函数将获取对象中每个字段的值。
var data = { "weather": [ { "temprature": 23, "precipitation": 2, "humidity": 57, "weather": 0 }, { "temprature": 20, "precipitation": 100, "humidity": 87, "weather": 1 }, { "temprature": 32, "precipitation": 5, "humidity": 70, "weather": 0 }, { "temprature": 18, "precipitation": 87, "humidity": 93, "weather": 1 }, { "temprature": 28, "precipitation": 0, "humidity": 37, "weather": 0 }, { "temprature": 13, "precipitation": 94, "humidity": 93, "weather": 1 }, { "temprature": 25, "precipitation": 4, "humidity": 43, "weather": 0 }, { "temprature": 20, "precipitation": 68, "humidity": 98, "weather": 1 }, { "temprature": 26, "precipitation": 0, "humidity": 9, "weather": 0 }, { "temprature": 13, "precipitation": 100, "humidity": 98, "weather": 1 } ] }; const result = data.weather.map(Object.values); console.log(result);
我认为以下功能应根据您的需要格式化json。
function formatJson(json) {
let weather = [];
json.weather.forEach((obj) => {
let tempArray = Object.values(obj);
weather.push(tempArray);
});
return weather;
}
与JSON如下
let json = {
"weather": [{
"temprature": 23,
"precipitation": 2,
"humidity": 57,
"weather": 0
},
{
"temprature": 20,
"precipitation": 100,
"humidity": 87,
"weather": 1
},
{
"temprature": 32,
"precipitation": 5,
"humidity": 70,
"weather": 0
},
{
"temprature": 18,
"precipitation": 87,
"humidity": 93,
"weather": 1
},
{
"temprature": 28,
"precipitation": 0,
"humidity": 37,
"weather": 0
},
{
"temprature": 13,
"precipitation": 94,
"humidity": 93,
"weather": 1
},
{
"temprature": 25,
"precipitation": 4,
"humidity": 43,
"weather": 0
},
{
"temprature": 20,
"precipitation": 68,
"humidity": 98,
"weather": 1
},
{
"temprature": 26,
"precipitation": 0,
"humidity": 9,
"weather": 0
},
{
"temprature": 13,
"precipitation": 100,
"humidity": 98,
"weather": 1
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.