Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JSON对象重新映射到其他JSON结构_Javascript_Json_Node.js - Fatal编程技术网

Javascript 将JSON对象重新映射到其他JSON结构

Javascript 将JSON对象重新映射到其他JSON结构,javascript,json,node.js,Javascript,Json,Node.js,我试图重新映射以下JSON结构,该结构按类别进行格式化,然后每个类别可以包含多个位置。位置包含lon/lat和区号: { “第1类”:[ {“地点”:{ “纬度”:51.38, “经度”:4.34, “代码”:“0873”} }, {“地点”:{ “纬度”:52.65, “经度”:6.74, “代码”:“0109”} }, {“地点”:{ “纬度”:51.48, “经度”:4.33, “代码”:“0748”} }, {“地点”:{ “纬度”:51.48, “经度”:4.33, “代码”:“01

我试图重新映射以下JSON结构,该结构按类别进行格式化,然后每个类别可以包含多个位置。位置包含lon/lat和区号:

{
“第1类”:[
{“地点”:{
“纬度”:51.38,
“经度”:4.34,
“代码”:“0873”}
},
{“地点”:{
“纬度”:52.65,
“经度”:6.74,
“代码”:“0109”}
},
{“地点”:{
“纬度”:51.48,
“经度”:4.33,
“代码”:“0748”}
},
{“地点”:{
“纬度”:51.48,
“经度”:4.33,
“代码”:“0109”}
}
],
“第二类”:[
{“地点”:{
“纬度”:52.33,
“经度”:4.32,
“代码”:“0873”}
},
{“地点”:{
“纬度”:52.65,
“经度”:6.74,
“代码”:“0109”}
},
{“地点”:{
“纬度”:51.48,
“经度”:4.33,
“代码”:“0728”}
}
],
“第三类”:[
{“地点”:{
“纬度”:52.33,
“经度”:4.32,
“代码”:“0873”}
},
{“地点”:{
“纬度”:52.65,
“经度”:6.74,
“代码”:“0109”}
},
{“地点”:{
“纬度”:51.48,
“经度”:4.33,
“代码”:“0758”}
}
]
}
进入以下结构,主要集中在区号上,然后是带有实际位置的类别

{
“代码”:[
{"0873":[
{“cat1”:[
{“位置”:{“纬度”:51.38,“经度”:4.34}
]},
{“第二类”:[
{“位置”:{“纬度”:52.33,“经度”:4.32}
]},
{“第三类”:[
{“位置”:{“纬度”:52.33,“经度”:4.32}
]}
]},
{"0109":[
{“cat1”:[
{“位置”:{“纬度”:52.65,“经度”:6.74},
{“位置”:{“纬度”:51.48,“经度”:4.33}
]},
{“第二类”:[
{“位置”:{“纬度”:52.65,“经度”:6.74}
]},
{“第三类”:[
{“位置”:{“纬度”:52.65,“经度”:6.74}
]}
]},
{"0748":[
{“cat1”:[
{“位置”:{“纬度”:51.48,“经度”:4.33}
]}
]},
{"0728":[
{“第二类”:[
{“位置”:{“纬度”:51.48,“经度”:4.33}
]}
]},
{"0758":[
{“第三类”:[
{“位置”:{“纬度”:51.48,“经度”:4.33}
]}
]}
]
}
我尝试在Javascript/Node中实现这一点,并且正在寻找一种比手动遍历所有对象并重新构造它们更优雅的方法。 正在调查,但找不到完成的方法

感谢您的帮助

我知道上面的片段是从文件中读取的JSON字符串,然后解析为对象

我必须执行此操作的代码目前尚未完成,因为我不知道执行
remapJson()
的最佳方法是什么:

var fs=require('fs'),
jsonfile=require('jsonfile');
函数remapJson(oldData){
var newData={};
//是否进行转换(循环所有键和值?)
返回新数据
}
obj=jsonfile.readFileSync('oldstructure.json');
writeFileSync('newstructure.json',remapJson(obj));

您可以使用迭代和递归方法来寻址哈希表中的结果数组

var data={cat1:[{位置:{纬度:51.38,经度:4.34,代码:“0873”},{位置:{纬度:52.65,经度:6.74,代码:“0109”},{位置:{纬度:51.48,经度:4.33,代码:“0748”},{位置:{纬度:51.48,经度:4.33,代码:“0109”},},cat2:[{位置:{纬度:52.33,经度:4.32,代码:“0873”},{地点:{纬度:52.65,经度:6.74,代码:“0109”},{地点:{纬度:51.48,经度:4.33,代码:“0728”}],cat3:[{地点:{纬度:52.33,经度:4.32,代码:“0873”},{地点:{纬度:52.65,经度:6.74,代码:“0109”},{地点:{纬度:51.48,经度:4.33,代码:“0758”}]},
结果={code:[]};
Object.keys(数据).forEach(函数(键){
数据[key].forEach(函数(a){
[a.location.code,key].reduce(函数(r,k){
var o={};
如果(!r[k]){
r[k]={{}:[]};
o[k]=r[k];
r、 _u.推(o);
}
返回r[k];
},这是)推送({location:{latitude:a.location.latitude,longitude:a.location.longitude});
},这个);
},{uu:result.code});
console.log(结果);

.as控制台包装{max height:100%!重要;top:0;}
试试这个

var a = //your json
var newArray = [];
for(var i in a){
    var obj = {};
    var newobj = {};
    var innerobj = {};
    var locationobj = {};
    if(a[i].length != 0){
        var keyname = i;
        for(var j = 0;j<a[i].length ; j++){
            if(a[i][j].location.code == "0873"){
                locationobj["latitude"] = a[i][j].location.latitude;
                locationobj["longitude"] = a[i][j].location.longitude;
                innerobj[i] = {"loaction":locationobj};
                obj[a[i][j].location.code] = innerobj;
                newArray.push({"code":obj})
            }else if(a[i][j].location.code == "0758"){
                locationobj["latitude"] = a[i][j].location.latitude;
                locationobj["longitude"] = a[i][j].location.longitude;
                innerobj[i] = {"loaction":locationobj};
                obj[a[i][j].location.code] = innerobj;
                newArray.push({"code":obj})
            }else if(a[i][j].location.code == "0109"){
                locationobj["latitude"] = a[i][j].location.latitude;
                locationobj["longitude"] = a[i][j].location.longitude;
                innerobj[i] = {"loaction":locationobj};
                obj[a[i][j].location.code] = innerobj;
                newArray.push({"code":obj})
            }

        }
    }
}

console.log(newArray)
var a=//您的json
var newArray=[];
对于(a中的var i){
var obj={};
var newobj={};
var innernobj={};
var locationobj={};
如果(a[i].长度!=0){
var-keyname=i;

对于(var j=0;jyou可以添加您的代码。请看这里:我可以建议使用请看一下:我添加了一些代码和解释程序,我首先将JSON字符串解析为一个对象。您能给出一个不硬连接区号的版本吗?这将很难,因为代码在循环中,并且对于获取,您必须迭代它…嗯,区号是动态的(通过匹配位置数据(lon/lat)找到)针对一个包含写入该位置的区号的topoJSON文件。之后我需要重新排序,以便能够创建该数据的一部分,因此我不知道前面的区号……将所有代码放入数组,然后迭代将使trickOn成为代码片段,它确实可以完美地工作。谢谢导入json文件但是解析它时,它会在Array.forEach(本机)
@Max上用
data[key]出错(函数(a){^TypeError:data[key]。forEach不是Object.keys.forEach.\uu(/Users/mwesten/source/tekenradar/temp.js:30:17)的函数
首先,它是数组。谢谢;)修复了它!似乎仍然错过了很多…原始json f