繁体   English   中英

使用纯Javascript将JSON转换为Javascript数组

[英]Converting JSON to a Javascript array using pure Javascript

我有JSON文件的以下部分。 我需要使用纯Javascript转换为Javascript数组。 具体来说,我只需要有一个数组useridmovieidratingtimestamp才能用于rating大于4.0

[{
    "rating": 3.0,
    "ratingsPK": {
        "movieId": 2017,
        "userId": 610
    },
    "timestamp": 913815387
}, {
    "rating": 5.0,
    "ratingsPK": {
        "movieId": 2017,
        "userId": 654
    },
    "timestamp": 959098930
}, {
    "rating": 4.0,
    "ratingsPK": {
        "movieId": 2017,
        "userId": 856
    },
    "timestamp": 1059863336
}, {
    "rating": 2.0,
    "ratingsPK": {
        "movieId": 2017,
        "userId": 903
    },
    "timestamp": 903628492
}, {
    "rating": 3.5,
    "ratingsPK": {
        "movieId": 2017,
        "userId": 1185
    },
    "timestamp": 1100560205
}]

您可以使用JSON.parse()将JSON字符串转换为JavaScript对象。 然后使用带有适当谓词的Array#filter精确获取所需的内容(在您的情况下, timestamp大于4)。

使用JSON.parse()Array.prototype.filter()函数的简单“ 单行 ”解决方案:

 var json_data = '[{"rating":3.0,"ratingsPK":{"movieId":2017,"userId":610},"timestamp":913815387},{"rating":5.0,"ratingsPK":{"movieId":2017,"userId":654},"timestamp":959098930},{"rating":4.0,"ratingsPK":{"movieId":2017,"userId":856},"timestamp":1059863336},{"rating":2.0,"ratingsPK":{"movieId":2017,"userId":903},"timestamp":903628492},{"rating":3.5,"ratingsPK":{"movieId":2017,"userId":1185},"timestamp":1100560205}]'; var arr = JSON.parse(json_data).filter(function(o){ return o.rating >= 4; }); console.log(arr); 

相同,但以EcmaScript6方式(使用箭头功能 ):

 var json_data = '[{"rating":3.0,"ratingsPK":{"movieId":2017,"userId":610},"timestamp":913815387},{"rating":5.0,"ratingsPK":{"movieId":2017,"userId":654},"timestamp":959098930},{"rating":4.0,"ratingsPK":{"movieId":2017,"userId":856},"timestamp":1059863336},{"rating":2.0,"ratingsPK":{"movieId":2017,"userId":903},"timestamp":903628492},{"rating":3.5,"ratingsPK":{"movieId":2017,"userId":1185},"timestamp":1100560205}]'; var arr = JSON.parse(json_data).filter((o) => o.rating >= 4 ); console.log(arr); 

转换为对象并过滤以进行评级后,您可以仅获取所需对象的各个部分而得到一个数组。

 var data = '[{"rating":3.0,"ratingsPK":{"movieId":2017,"userId":610},"timestamp":913815387},{"rating":5.0,"ratingsPK":{"movieId":2017,"userId":654},"timestamp":959098930},{"rating":4.0,"ratingsPK":{"movieId":2017,"userId":856},"timestamp":1059863336},{"rating":2.0,"ratingsPK":{"movieId":2017,"userId":903},"timestamp":903628492},{"rating":3.5,"ratingsPK":{"movieId":2017,"userId":1185},"timestamp":1100560205}]', result = JSON.parse(data).filter(function (a) { return a.rating > 4; }).map(function (a) { return [a.ratingsPK.userId, a.ratingsPK.movieId, a.rating, a.timestamp]; }); console.log(result); 

JSON.parse()可用于将JSON转换为JS对象。 以下是适合您需要的精品。

var data='[{"rating":1.0,"ratingsABC":{"movieId":2017,"userId":123},"timestamp":913815387},{"rating":1.0,"ratingsABC":{"movieId":2017,"userId":123},"timestamp":913815387},{"rating":1.0,"ratingsABC":{"movieId":2017,"userId":123},"timestamp":913815387}]';
var sortedData= JSON.parse(data).filter((a) => a.rating >= 4 );

这是不使用任何花哨的API:

var jsonArr = [
    {"rating":3.0,"ratingsPK":{"movieId":2017,"userId":610},"timestamp":913815387},
    {"rating":5.0,"ratingsPK":{"movieId":2017,"userId":654},"timestamp":959098930},
    {"rating":4.0,"ratingsPK":{"movieId":2017,"userId":856},"timestamp":1059863336},
    {"rating":2.0,"ratingsPK":{"movieId":2017,"userId":903},"timestamp":903628492},
    {"rating":3.5,"ratingsPK":{"movieId":2017,"userId":1185},"timestamp":1100560205}];

var arr = [];

for(var x in jsonArr){
    if(jsonArr[x]['rating'] > 4.0 ){
        arr.push(jsonArr[x]['ratingsPK']['userId']);
        arr.push(jsonArr[x]['ratingsPK']['movieId']);
        arr.push(jsonArr[x]['rating']);
        arr.push(jsonArr[x]['timestamp']);
    }
}
console.log(arr);

您可以使用XMLHttpRequest读取JSON文件,该文件将作为字符串返回,并假设您将文件数据保存在变量中。 jsonFile

如下所示使用JSON.parse

var rating = JSON.parse(jsonFile);

以下是工作示例。

  var rating = [ {"rating":3.0,"ratingsPK":{"movieId":2017,"userId":610},"timestamp":913815387}, {"rating":5.0,"ratingsPK":{"movieId":2017,"userId":654},"timestamp":959098930}, {"rating":4.0,"ratingsPK":{"movieId":2017,"userId":856},"timestamp":1059863336}, {"rating":2.0,"ratingsPK":{"movieId":2017,"userId":903},"timestamp":903628492}, {"rating":3.5,"ratingsPK":{"movieId":2017,"userId":1185},"timestamp":1100560205} ]; var bestRated = []; rating.forEach(function (item) { if(item.rating > 4) { bestRated.push({ userid: item.ratingsPK.userId, movieid: item.ratingsPK.movieId, rating: item.rating, timestamp: item.timestamp }); } }); console.log('bestRated: ', bestRated); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM