Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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字符串中的缩写替换js对象属性的名称?_Javascript_Json_Object - Fatal编程技术网

Javascript 用JSON字符串中的缩写替换js对象属性的名称?

Javascript 用JSON字符串中的缩写替换js对象属性的名称?,javascript,json,object,Javascript,Json,Object,我想将一些非常大且重复的javascript对象转换为JSON字符串。因为这些对象有很多重复的属性名,所以我想用一个预定义的属性名到缩写的映射,用最终JSON字符串中的缩写替换这些属性名。我想我可以使用JSON.stringify提供的replacer函数来避免先生成JSON字符串然后再对其进行操作,或者直接对原始对象的属性名进行操作,但我还没有弄清楚如何操作 例如,给定以下属性名称和缩写之间的映射: var map = { prop0: "p0", prop

我想将一些非常大且重复的javascript对象转换为JSON字符串。因为这些对象有很多重复的属性名,所以我想用一个预定义的属性名到缩写的映射,用最终JSON字符串中的缩写替换这些属性名。我想我可以使用JSON.stringify提供的replacer函数来避免先生成JSON字符串然后再对其进行操作,或者直接对原始对象的属性名进行操作,但我还没有弄清楚如何操作

例如,给定以下属性名称和缩写之间的映射:

var map = {
    prop0: "p0",
    prop1: "p1",
    prop2: "p2"
}
我希望能够转换以下对象:

var obj = {
    prop0: "value0",
    prop1: [
        {prop2: "value2"},
        {prop2: "value3"},
        {prop2: "value4"}
    ]
}
转换为JSON字符串,如下所示:

{"p0":"value0","p1":[{"p2":"value2"},{"p2":"value3"},{"p2":"value4"}]}
然后再返回。

U可以使用节点模块


它为您提供了一种提供自己模式并将数据转换为该格式的方法。

压缩JSON的方法可能更好,但和可用于修改嵌套值(示例在IE中不起作用):

var obj={prop0:“value0”,prop1:[{prop2:“value2”},{prop2:“value3”},{prop2:“value4”}
var replacer=map=>(k,v)=>v.constructor!==对象五:
Object.fromEntries(Object.entries(v.map)([k,v])=>[map[k]| | k,v]))
var json=json.stringify(obj,replacer({prop0:p0',prop1:p1',prop2:p2}))
var obj2=JSON.parse(JSON,replacer({p0:prop0),p1:prop1,p2:prop2}))
console.log(json)

log(obj2)
如果没有更多嵌套值,您可以尝试类似的方法

var映射={
prop0:“p0”,
方案一:“p1”,
方案2:“p2”
}
var obj={
prop0:“value0”,
建议1:[{
建议2:“价值2”
},
{
建议2:“价值3”
},
{
建议2:“价值4”
}
]
}
const newObj={};
用于(输入obj){
if(Array.isArray(obj[key])){
newObj[map[key]=obj[key].map(x=>{
常量arrKey=Object.keys(x)[0];
返回{
[map[arrKey]]:x[arrKey]
}
})
}否则{
newObj[map[key]]=obj[key]
}
}

log(JSON.stringify(newObj))
Hmm好的,那么如果我理解正确,replacer函数将返回每个嵌套对象的一个副本,并替换其属性名?我想我可能会使用这个,谢谢,尽管我也可能会在不编辑原始属性名称的条件上妥协。另外,我做了一些测试,在我的特殊情况下,用缩写替换属性名可以将JSON字符串的大小减少大约40%,所以这可能是一个很好的第一步@榴辉岩是的,它创建了新的对象,这些对象的值都是对象。它可以转换为for循环,以提高效率并在IE中工作。您可以将键缩短为单个字母或数字,以节省更多空间。