简体   繁体   English

遍历JavaScript中的JSON对象

[英]Loop through JSON objects in JavaScript

I have a JSON structure like this in my JavaScript code 我的JavaScript代码中具有这样的JSON结构

[{"id":10,"latitude":"49","longitude":"2","altitude":"construction","name":"sjiajnjdksaa","description":"jfis","urlidle":"asd","urlselected":"asd"},
    {"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

    {"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

    {"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

    {"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

    {"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

    {"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"}]

This is obtained from a $.getJSON(serverUrl, function(data) method like the follows. 这是从$.getJSON(serverUrl, function(data)方法获得的,如下所示。

var serverUrl = https://demo.blah.fgh/return.php?lat=20;
var jqxhr = $.getJSON(serverUrl, function(data) {
console.log(jqxhr.responseText);

However, I need to iterate through each one of them and get each row into an object like the follows 但是,我需要遍历它们中的每一个并将每一行放入一个对象,如下所示

//Loop Starts

var singlePoi = {
                "id": poiData[i].id,
                "latitude": parseFloat(poiData[i].latitude),
                "longitude": parseFloat(poiData[i].longitude),
                "altitude": parseFloat(poiData[i].altitude),
                "title": poiData[i].name,
                "description": poiData[i].description,
                "urlidle": poiData[i].urlidle,
                "urlselected": poiData[i].urlselected

            };
// Now do operations with singlePoi
//Loop ends

Using jQuery, 使用jQuery,

$.each(pioData, function(i, v) {
        v.latitude = parseFloat(v.latitude);
        ...
        ...
        ...

});

Because essentially, what you are doing to the array of objects is changing each attribute's value type. 因为从本质上讲,您对对象数组所做的就是更改每个属性的值类型。 When you are done iterating, you can just use pioData again, modified to your needs. 完成迭代后,您可以再次使用pioData ,并根据需要进行修改。

You can try this classical javascript forEach 您可以尝试以下经典javascript forEach

lets your Json structure is 让你的Json结构是

var data=[{"id":10,"latitude":"49","longitude":"2","altitude":"construction","name":"sjiajnjdksaa","description":"jfis","urlidle":"asd","urlselected":"asd"},
{"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

{"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

{"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

{"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

{"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"},

{"id":10,"latitude":"22","longitude":"10","altitude":"asd","name":"zxcvbnmmmkk","description":"kk","urlidle":"qwerty","urlselected":"qwerty"}];

//Loop Starts
    data.forEach(function(poiData){
var singlePoi = {
                "id": poiData.id,
                "latitude": parseFloat(poiData.latitude),
                "longitude": parseFloat(poiData.longitude),
                "altitude": parseFloat(poiData.altitude),
                "title": poiData.name,
                "description": poiData.description,
                "urlidle": poiData.urlidle,
                "urlselected": poiData.urlselected

            };
// Now do operations with singlePoi
});
//Loop ends

If you are looking to iterate through the return and format the objects, you can do something like this: 如果您要遍历返回值并格式化对象,则可以执行以下操作:

function formatReturn(data) {
  var formattedData = [];
  data.forEach( function(poiData) {
    formattedData.push(
      {
        "id": poiData.id,
        "latitude": parseFloat(poiData.latitude),
        "longitude": parseFloat(poiData.longitude),
        "altitude": parseFloat(poiData.altitude),
        "title": poiData.name,
        "description": poiData.description,
        "urlidle": poiData.urlidle,
        "urlselected": poiData.urlselected
      }
    );
  });
  console.log(formattedData);
}

Note that in this case you will still have an array of objects, but the latitude, longitude, and altitude attributes will have parseFloat applied to them. 请注意,在这种情况下,您仍将具有对象数组,但是纬度,经度和高度属性将应用parseFloat。

If you are looking to store all of the rows as attributes in an object, you could do something like this: 如果希望将所有行作为属性存储在对象中,则可以执行以下操作:

function formatReturn(data) {
  var formattedData = {};
  data.forEach( function(poiData,index) {
    formattedData["singlePoi_"+index] =
      {
      "id": poiData.id,
      "latitude": parseFloat(poiData.latitude),
      "longitude": parseFloat(poiData.longitude),
      "altitude": parseFloat(poiData.altitude),
      "title": poiData.name,
      "description": poiData.description,
      "urlidle": poiData.urlidle,
      "urlselected": poiData.urlselected
    };
  }
  console.log(formattedData);
}

The above will store each item in the JSON return as a new attribute of the formattedData object. 上面的代码会将每一项存储在JSON返回中,作为formattedData对象的新属性。

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

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