动态删除复杂JSON数据中的空键(使用普通JavaScript)
我尝试了许多不同的方法,仅使用JavaScript从JSON文件中动态解析和删除带有空值的键 到目前为止,我已经能够删除未嵌套的键,但长度大于0的空字符串除外 我的主要问题是如何访问子值,计算嵌套键并只删除嵌套键-现在我最终删除根键 请原谅,如果这是一个重复的问题,但我找不到任何具体的情况下,在这里或其他地方为我工作的实施 以下是我到目前为止的情况:动态删除复杂JSON数据中的空键(使用普通JavaScript),javascript,json,Javascript,Json,我尝试了许多不同的方法,仅使用JavaScript从JSON文件中动态解析和删除带有空值的键 到目前为止,我已经能够删除未嵌套的键,但长度大于0的空字符串除外 我的主要问题是如何访问子值,计算嵌套键并只删除嵌套键-现在我最终删除根键 请原谅,如果这是一个重复的问题,但我找不到任何具体的情况下,在这里或其他地方为我工作的实施 以下是我到目前为止的情况: //数据 让输入=“{”姓氏“:”史密斯“,”电子邮件“:”简。smith@wyng.com“,”性别“:”空,“邀请函“:[{”发件人“:”测
//数据
让输入=“{”姓氏“:”史密斯“,”电子邮件“:”简。smith@wyng.com“,”性别“:”空,“邀请函“:[{”发件人“:”测试“,”代码“:”}],”公司“:{”姓名“:”dds“,”行业“:[”}”,地址“{”城市“:”纽约“,”州“:”纽约“,”邮政“:”10011“,”街道“:”,”新值“:”}”;
//主要功能
函数removeEmptyFields(inputJSON){
让data=JSON.parse(inputJSON);
//访问顶级密钥(案例1)
for(让我们输入数据){
设项=数据[键];
//如果价值不在顶层,则深入挖掘
if(item!==null&&typeof item!==object){
删除记录(项目)
}否则{
(项目)
}
if(item==null&&typeof item===object){
删除记录(项目)
}
//删除空记录的函数
功能删除记录(项目){
//console.log(item+“#”);//删除空记录的函数
如果(项===null | |项===未定义||
item.length==0){
删除数据[键];
}
}
//函数访问嵌套在一个级别上的值(案例2)
函数(键){
if(typeof key=='object'&&typeof key!=null){
for(让键2输入键){
if(键的类型[key2]=='object'&键的类型[key2]!=null){
console.log()
for(让子项在键[key2]中){
//删除记录(键2[子项])
}
}
删除记录(项目[key2])
查找深度(项目[key2]);
}
}
}
}
返回数据;
}
让输出=removeEmptyFields(输入)
控制台日志(输出);
//案例:
//1->平面对象:
//数据[键]
//2->数组/对象
//数据[键][数组索引]
//3->对象/对象
//数据[键][子键]
//4->对象/对象/数组
//数据[键][子键][数组索引]
//按顺序测试用例,并在最后删除空值。结果返回数据
如果您修复了递归调用并删除了所有不必要的结果,您实际上已经非常接近了:
function cleanUp(obj) {
for(const key in obj) {
const value = obj[key];
if(typeof value === "object") {
cleanUp(value);
} else if(!value && value !== 0) {
delete obj[key];
}
}
}
let output = JSON.parse(input);
cleanUp(output);
如果您修复了递归调用并删除了所有不必要的内容,那么您实际上已经非常接近了:
function cleanUp(obj) {
for(const key in obj) {
const value = obj[key];
if(typeof value === "object") {
cleanUp(value);
} else if(!value && value !== 0) {
delete obj[key];
}
}
}
let output = JSON.parse(input);
cleanUp(output);
找到了一种方法。
感谢所有做出贡献的人:
//DATA
let input = '{"first_name": "","last_name": "Smith","email":"jane.smith@wyng.com","gender": null,"invitations": [{"from": "test","code": ""}],"company": {"name": "dds","industries": [""]},"address": {"city": "New York","state": "NY","zip": "10011","street": " "},"new Value": ""}';
function isEmpty(value) {
if (value === null)
return true;
if (typeof value == 'object' && Object.keys(value).length === 0)
return true;
if (typeof value == 'string' && value.trim() == '')
return true;
return false;
}
function removeEmptyFields(input) {
if (Array.isArray(input)) {
for (var index = input.length - 1; index >= 0; index--) {
if (typeof input[index] == 'object') {
removeEmptyFields(input[index]);
}
if (isEmpty(input[index])) {
input.splice(index, 1);
}
}
} else {
for (var index in input) {
if (typeof input[index] == 'object') {
removeEmptyFields(input[index]);
}
if (isEmpty(input[index])) {
delete input[index];
}
}
}
return input
}
找到了一种方法。
感谢所有做出贡献的人:
//DATA
let input = '{"first_name": "","last_name": "Smith","email":"jane.smith@wyng.com","gender": null,"invitations": [{"from": "test","code": ""}],"company": {"name": "dds","industries": [""]},"address": {"city": "New York","state": "NY","zip": "10011","street": " "},"new Value": ""}';
function isEmpty(value) {
if (value === null)
return true;
if (typeof value == 'object' && Object.keys(value).length === 0)
return true;
if (typeof value == 'string' && value.trim() == '')
return true;
return false;
}
function removeEmptyFields(input) {
if (Array.isArray(input)) {
for (var index = input.length - 1; index >= 0; index--) {
if (typeof input[index] == 'object') {
removeEmptyFields(input[index]);
}
if (isEmpty(input[index])) {
input.splice(index, 1);
}
}
} else {
for (var index in input) {
if (typeof input[index] == 'object') {
removeEmptyFields(input[index]);
}
if (isEmpty(input[index])) {
delete input[index];
}
}
}
return input
}
item===null&&typeof item==='object'
这从来都不是真的。谢谢你,乔纳斯,我要检查一下这方面的文档。lookdeep
需要一个键,你传递一个值lookdeep(item[key2])代码>@JonasWtypeof null
是“object”…item===null&&typeof item===“object”
这从来都不是真的。谢谢你,乔纳斯,我要检查一下这方面的文档。lookDeeper
需要一个键,你传递一个值lookDeeper(item[key2])代码>@JonasWtypeof null
是“object”…感谢您花时间回答Jonas。不幸的是,我的输出不是我所需要的。例如,我需要从输出中删除“邀请”、“街道”和“性别”。我认为缺少的是对键内对象的更深入迭代。仍在努力实现它感谢您花时间回答Jonas。不幸的是,我的输出不是我所需要的。例如,我需要从输出中删除“邀请”、“街道”和“性别”。我认为缺少的是对键内对象的更深入迭代。仍在努力实施它