我试图编写一个获取json文件内容的js脚本 将html编码(通过node.js包)应用于对象值,然后将其吐回到json文件中
我认为我有我需要做的开始和结束。 我可以从console.log中看到编码正在成功应用于每个对象值,但我不确定如何从for循环的编码结果中连贯地重新创建一个js对象。
我想了解一旦值被编码后我如何重新创建arr变量(如果这是正确的方法),那么我可以将字符串化并输出一个json文件。
由于
var arr = {
"a": "Some strings of text",
"b": "to be encoded",
"c": "& converted back to a json file",
"d": "once they're encoded"
};
for(var i=0;i<arr.length;i++){
var obj = arr[i];
for(var key in obj){
var attrName = key;
var attrValue = obj[key];
var encodedAttrValue = encode(attrValue);
console.log(encodedAttrValue); // checking encoding is successful
var outputJson = // recreate a js object with the cumulated output of the encoding i.e. each encodedAttrValue
var outputFilename = 'encoded.json';
fs.writeFile(outputFilename, JSON.stringify(outputJson, null, 4), function(err) {
if(err) {
console.log(err);
} else {
console.log("Encoded version has been saved to " + outputFilename);
}
});
}
}
答案 0 :(得分:0)
使用Array.prototype.reduce
的简单Object.assign
即可
// objectMap reusable utility
function objectMap(f,a) {
return Object.keys(a).reduce(function(b,k) {
return Object.assign(b, {
[k]: f(a[k])
})
}, {})
}
var arr = {
"a": "Some strings of text",
"b": "to be encoded",
"c": "& converted back to a json file",
"d": "once they're encoded"
}
var encodedValues = Object.keys(arr).reduce(function(out,k) {
return Object.assign(out, {[k]: encode(arr[k])})
}, {})
fs.writeFile(outputFilename, JSON.stringify(encodedValues, null, 4), function(err) {
if (err)
console.error(err.message)
else
console.log("Encoded values have been saved to %s", outputFilename)
})
以下是带有模拟encode
功能的代码段,向您展示中间encodedValues
// pretend encode function
function encode(value) {
return value.toUpperCase()
}
// objectMap reusable utility
function objectMap(f,a) {
return Object.keys(a).reduce(function(b,k) {
return Object.assign(b, {
[k]: f(a[k])
})
}, {})
}
var arr = {
"a": "Some strings of text",
"b": "to be encoded",
"c": "& converted back to a json file",
"d": "once they're encoded"
}
var encodedValues = objectMap(encode, arr)
console.log(JSON.stringify(encodedValues, null, 4))
// {
// "a": "SOME STRINGS OF TEXT",
// "b": "TO BE ENCODED",
// "c": "& CONVERTED BACK TO A JSON FILE",
// "d": "ONCE THEY'RE ENCODED"
// }
答案 1 :(得分:0)
你可以用以下简单的方式写这个:
newObj = {};
for (k in obj) { newObj[k] = encode(obj[k]); }
答案 2 :(得分:-1)
循环浏览json对象时使用.push(obj)
方法。
首先将outputJson
取出循环,然后在完成对对象的编码时将其推送到outputJson
。
outputJson.push({
attrName: key,
attrValue: encodedAttrValue
});
这应该可以解决问题。