在 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) =&gt; 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() 的输出中隐藏空值的主要内容,如果未能解决你的问题,请参考以下文章

在 JSON.stringify 中使用变量

Node.js JSON.stringify() 在输出中导致“。无法使用 Jquery 解析

JSON.stringify出现 "Converting circular structure to JSON"

格式化输出 JSON

php json_encode不同于js的输出JSON.stringify [复制]

从 json (JSON.stringify(res[0]) ) 创建表 - 以字符串形式输出 - 应转换为 html 中的表