如何通过JSON属性在Javascript中创建变量名

时间:2019-01-09 17:24:49

标签: javascript json variables

我需要在Javascript中设置简单的var,以每个JSON行的循环中的JSON属性命名。它们的值也将来自JSON。

例如,这是我的模板:var paris = {lat: 48.866667, lng: 2.333333};

但是在Json行上有一个循环 var json [i] .code = {lat: json [i] .latitude ,lng: json [i] .longitude }; < / p>

这是我的JS代码,到目前为止,我仍无法弄清楚它的工作原理……感谢您的宝贵帮助。

function initMap() {

  //my template 
    var paris = {lat: 48.866667, lng: 2.333333};

    //my actual data
    var json=[{"code":"london","latitude":"50.633333","longitude":"3.066667"},{"code":"berlin","latitude":"47.478419","longitude":"-0.563166"}];            

    //my code to create my vars from Json
    for( var i=0;i< json.length; i++ ){
        var json[i].code = "{lat:" + json[i].latitude + " , lng: " +json[i].longitude +" }";
        }
    }
}

4 个答案:

答案 0 :(得分:0)

这是使用Array.reduce的转换,该转换可回溯到IE10:

function initMap() {
  //Your template 
  var paris = {lat: 48.866667, lng: 2.333333};

  //Your actual data
  var json =[
    {"code":"london","latitude":"50.633333","longitude":"3.066667"},
    {"code":"berlin","latitude":"47.478419","longitude":"-0.563166"}
  ]; 

  //Code to create new Object
  var newObj = json.reduce((obj, data) => {
    obj[data.code] = {lat:data.latitude, lng: data.longitude};
    return obj;
  }, {});
  
  console.log(JSON.stringify(newObj,0,2));
}

initMap();

这将使用code的值作为键将每个条目转换为新对象中的条目,而新数据是符合您要求的对象。

答案 1 :(得分:0)

首先,在声明变量后,请勿像这样var之前使用关键字var json[i].code,而只需写成json[i].code

然后,当您在代码中使用JSON时,无需在Javascript中的两个""之间放置任何内容。

只需执行以下操作:

{
  latitude: 50.6,
  longitude: 50.7
}

不是这个:

"{
  latitude: 50.6,
  longitude: 50.7
}"

然后,您得到结果:

function initMap() {
    var paris = {
        lat: 48.866667,
        lng: 2.333333
    };

    var json = [
        {
            code: "london",
            latitude: 50.633333,
            longitude: 3.066667
        },
        {
            code: "berlin",
            latitude: 47.478419,
            longitude: -0.563166
        }
    ];            

    //my code to create my vars from Json
    for(var i = 0; i < json.length; i++){
        json[i] = {
            code: json[i].code,
            lat: json[i].latitude,
            lng: json[i].longitude
        };
    }
    
    console.log(json);
}

initMap();

答案 2 :(得分:-1)

如果我理解正确,则您正在尝试为每一行创建一个单独的变量。

您可以通过使用window属性使用全局变量来执行此操作,或者如果您希望将其在本地范围内定义为函数,则可以创建本地父对象。

//Defining the variables globally
function initMapGlobal() {

    //my template 
    var paris = {
        lat: 48.866667,
        lng: 2.333333
    };

    //my actual data
    var json = [{
        "code": "london",
        "latitude": "50.633333",
        "longitude": "3.066667"
    }, {
        "code": "berlin",
        "latitude": "47.478419",
        "longitude": "-0.563166"
    }];

    //my code to create my vars from Json
    for (var i = 0; i < json.length; i++) {
        window[json[i].code] = JSON.parse('{"lat":' + json[i].latitude + ' , "lng": ' + json[i].longitude + ' }');
    }
}

initMapGlobal();
console.log('Outside of Function - Global');
console.log('Variable Value: ', london);
console.log('Value of London Latitude: ', london.lat);
console.log('\n**************\n');


//Defining the variables local to the function
function initMapLocal() {
    var cityParent = {};

    //my template 
    var paris = {
        lat: 48.866667,
        lng: 2.333333
    };

    //my actual data
    var json = [{
        "code": "london",
        "latitude": "50.633333",
        "longitude": "3.066667"
    }, {
        "code": "berlin",
        "latitude": "47.478419",
        "longitude": "-0.563166"
    }];

    //my code to create my vars from Json
    for (var i = 0; i < json.length; i++) {
        cityParent[json[i].code] = JSON.parse('{"lat":' + json[i].latitude + ' , "lng": ' + json[i].longitude + ' }');
    }

    console.log('Inside of function:');
    console.log('Variable Value: ', cityParent.london);
    console.log('Value of London Latitude: ', cityParent.london.lat);
    console.log('\n**************\n');
}


initMapLocal();
console.log('Outside of function: (these will crash because they are local)');
console.log('Variable Value: ', cityParent.london);
console.log('Value of London Latitude: ', cityParent.london.lat);

答案 3 :(得分:-2)

function initMap() {

  //my template 
    var paris = {lat: 48.866667, lng: 2.333333};

    //my actual data
    var json=[{"code":"london","latitude":"50.633333","longitude":"3.066667"},{"code":"berlin","latitude":"47.478419","longitude":"-0.563166"}];            

    //my code to create my vars from Json
    for( var i=0;i< json.length; i++ ){
        var obj = {};
        obj.lat = json[i].latitude;
        obj.lng = json[i].longitude;
        window[json[i].code] = obj;
    }
}