在 JSON.stringify() 的输出中隐藏空值
Posted
技术标签:
【中文标题】在 JSON.stringify() 的输出中隐藏空值【英文标题】:Hide null values in output from JSON.stringify() 【发布时间】:2017-04-28 04:41:28 【问题描述】:在我的代码中,从postgres表行中的所有信息都会在选择特定的ROWID时绑定。
var jsonRes = result.message.rows;
document.getElementById('panel').innerhtml = '<pre>' + JSON.stringify(jsonRes[0], null, "\t") + '</pre>'
结果如下所示:
"ogc_fid": 143667,
"relkey": 288007,
"acct": "000487000A0010000",
"recacs": "12.5495 AC",
"shape_star": 547131.567383,
"shape_stle": 3518.469618,
"objectid": 307755,
"zone_dist": "MU-3",
"pd_num": null,
"council_da": null,
"long_zone_": "MU-3",
"globalid": "D5B006E8-716A-421F-A78A-2D71ED1DC118",
"ord_num": null,
"notes": null,
"res_num": null,
"effectived": 1345766400000,
"shape.star": 629707.919922,
"shape.stle": 3917.657332,
"case_numbe": null,
"common_nam": null,
"districtus": null
我是 JS 新手,想知道是否有一种简单的方法可以完全排除包含空值的列 - 一个大致如下所示的函数:
function hide(jsonObject)
if (property === null)
hide property
else
return str
最后,面板中的对象如下所示:
"ogc_fid": 143667,
"relkey": 288007,
"acct": "000487000A0010000",
"recacs": "12.5495 AC",
"shape_star": 547131.567383,
"shape_stle": 3518.469618,
"objectid": 307755,
"zone_dist": "MU-3",
"long_zone_": "MU-3",
"globalid": "D5B006E8-716A-421F-A78A-2D71ED1DC118",
"effectived": 1345766400000,
"shape.star": 629707.919922,
"shape.stle": 3917.657332
【问题讨论】:
检索结果集的查询在哪里? 什么版本的javascript,或节点? 这也包括节点var url = '/api/parcels/'+layerName+'/parcel/'+parcelKey; makeAjaxRequest(url, params = ) .done(function(result) var jsonRes = result.message.rows; if (features.length) // Get coordinates from the symbol and center the map on those coordinates map.flyTo(center: e.lngLat); console.log(e.lngLat);
***.com/questions/26540706/… 的可能重复项
【参考方案1】:
你可以这样做:
let x =
'x1':0,
'x2':null,
'x3':"xyz",
'x4': null
console.log(JSON.stringify(x, (key, value) =>
if (value !== null) return value
))
【讨论】:
现代语法允许一个不错的单行:JSON.stringify(x, (k, v) => v ?? undefined)
【参考方案2】:
感谢您的回复。我刚刚意识到 JSON.stringify() 有一个REPLACER
参数(info here)
所以我只是添加了:
function replacer(key, value)
// Filtering out properties
if (value === null)
return undefined;
return value;
document.getElementById('panel').innerHTML =
'<pre>' +
JSON.stringify(jsonRes[0], replacer, "\t") +
'</pre>'
;
【讨论】:
完美答案。我已经有一个替换器来去除循环引用,所以我只是添加了空检查。【参考方案3】:如果你想保留你的初始对象,你可以像这样创建一个新对象
var object =
"ogc_fid": 143667,
"relkey": 288007,
"acct": "000487000A0010000",
"recacs": "12.5495 AC",
"shape_star": 547131.567383,
"shape_stle": 3518.469618,
"objectid": 307755,
"zone_dist": "MU-3",
"pd_num": null,
"council_da": null,
"long_zone_": "MU-3",
"globalid": "D5B006E8-716A-421F-A78A-2D71ED1DC118",
"ord_num": null,
"notes": null,
"res_num": null,
"effectived": 1345766400000,
"shape.star": 629707.919922,
"shape.stle": 3917.657332,
"case_numbe": null,
"common_nam": null,
"districtus": null
;
var newObj = ;
Object.keys(object).forEach(function(key)
if (object[key] !== null)
newObj[key] = object[key];
);
console.log(newObj);
【讨论】:
【参考方案4】:试试这个:
function getCleanObject(jsonObject)
var clone = JSON.parse(JSON.stringify(jsonObject))
for(var prop in clone)
if(clone[prop] == null)
delete clone[prop];
return JSON.stringify(clone);
【讨论】:
以上是关于在 JSON.stringify() 的输出中隐藏空值的主要内容,如果未能解决你的问题,请参考以下文章
Node.js JSON.stringify() 在输出中导致“。无法使用 Jquery 解析
JSON.stringify出现 "Converting circular structure to JSON"
php json_encode不同于js的输出JSON.stringify [复制]
从 json (JSON.stringify(res[0]) ) 创建表 - 以字符串形式输出 - 应转换为 html 中的表