javascript - 找一个空数组,修改json
问题描述
您能否对函数调用部分 checkAndFixNullArray 提供提示/指导。我正在检查输入 json 是否有任何空数组(本例中的兄弟姐妹)。如果任何空数组输出 json 应该吐出该数组,如下所示:
"siblings": [{
"array": "empty"
}]
json 的其余部分应按原样传递。这是输入的json(示例)
{
"request":{
"requestTag":{
"trigger":"abc",
"datapoweruser":"german"
},
"enduser":{
"first":"mansoor",
"last":"ali",
"gender":"male",
"siblings":[],
"values":[
{
"ab":"alphabets"
}
]
}
}
}
输出json
{
"request":{
"requestTag":{
"trigger":"abc",
"datapoweruser":"german"
},
"enduser":{
"first":"mansoor",
"last":"ali",
"gender":"male",
"siblings":[
{
"array":"empty"
}
],
"values":[
{
"ab":"alphabets"
}
]
}
}
}
我尝试过的代码(用于将所有 json 对象复制到输出)。我认为功能 checkAndFixNullArray 中的一个小改动将解决这个问题。但是我不确定使用哪个检查来查看数组对象是否为空
var what = Object.prototype.toString;
function walkObj(obj, fn) {
var wo = what.call(obj);
if (wo == "[object Object]") {
Object.keys(obj).forEach(function(key){
fn(obj, key);
var item = obj[key], w = what.call(item);
if (w == "[object Object]" || w == "[object Array]") {
walkObj(item, fn);
}
});
}
else if (wo == "[object Array]") {
obj.forEach(function(item, ix) {
fn(obj, ix);
});
obj.forEach(function(item, ix) {
var w = what.call(item);
if (w == "[object Object]" || w == "[object Array]") {
walkObj(item, fn);
}
});
}
}
function checkAndFixNullArray(parent, key) {
var value = parent[key], w = what.call(value);
if ((w == "empty[object Array]")) {
parent[key] = null;
}
}
walkObj(json, checkAndFixNullArray);
解决方案
这将非常简单JSON.stringify
- 只需检查有问题的值是否为数组且为空,如果是,则将{ array: empty }
对象添加到其中(丢弃序列化):
const input = {
"request":{
"requestTag":{
"trigger":"abc",
"datapoweruser":"german"
},
"enduser":{
"first":"mansoor",
"last":"ali",
"gender":"male",
"siblings":[],
"values":[
{
"ab":"alphabets"
}
]
}
}
};
JSON.stringify(
input,
(key, val) => {
if (Array.isArray(val) && val.length === 0) {
val.push({ array: "empty" });
}
return val
}
);
console.log(input);
推荐阅读
- javascript - “set_correct” 类应用于所有元素。为什么?
- apache - 重写 SEO url 中的 URL
- c# - 读取文件时出现 System.StackOverflowException c#
- angular - 如何从活跃的轮播中获取价值?
- apache-spark - Databricks:结构流数据分配和显示
- google-apps-script - 是否可以通过 Gmail API 为 Gmail 插件使用当前的消息访问令牌(或等效令牌)?
- c# - C# 中的 httpClient 调用超时,而 cUrl 正在工作
- tableau-api - Tableau Server 尝试激活但说找不到命令
- android - Capacitor 3.0 升级插件“未实现”异常 (Nx Monorepo)
- javascript - 具有导入和导出功能的 React & Babel