如何将存储JSON数据的对象转换为Angular中的数组?

时间:2018-07-15 17:24:30

标签: javascript json angular tensorflow.js

我目前想使用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
        }
    ]
}

2 个答案:

答案 0 :(得分:0)

我不确定您希望输出数据是什么样子,但可以尝试一下。

您实际上可以单行执行此操作:

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);

答案 1 :(得分:0)

我认为以下函数应根据您的需要格式化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
    }
    ]
}