【问题标题】:javascript - JSON file use a value only if key existsjavascript - JSON 文件仅在键存在时才使用值
【发布时间】:2017-11-24 19:25:45
【问题描述】:

我正在从 overpass 调用中检索 OSM Json,以获取我必须保存在数据库中的功能列表。由于数据彼此非常不同(例如,其中一些确实有一个名为“addr:city”的标签,而其中一些没有),我想检查一个键是否存在,只有在这种情况下才保存对应的值。我只发现了this 问题,但这不是我的情况,因为我不知道一个元素将具有哪些键,哪些没有,并且由于我正在处理大量数据,我真的不能逐一检查元素,当然我不能为每种情况编写一个 IF。
有没有办法解决这个问题?我在考虑“如果键具有空值,则忽略它”,同时遍历元素,但我不知道是否存在类似的东西

编辑:

这是我的查询:

https://overpass-api.de/api/interpreter?data=[out:json][timeout:25];(node[~%22^(tourism|historic)$%22~%22.%22](44.12419,%2012.21259,%2044.15727,%2012.27696);way[~%22^(tourism|historic)$%22~%22.%22](44.12419,%2012.21259,%2044.15727,%2012.27696););out%20center; 

这是我用来在 firebase 上保存数据的代码:

results.elements.forEach(e=>{


  var ref = firebase.database().ref('/point_of_interest/');
  var key = firebase.database().ref().child('point_of_interest').push().key;   
  var updates = {};
  var data = {
    città: e.tags["addr:city"],
    tipologia: e.tags["amenity"],
    indirizzo: e.tags["addr:street"],
    nome: e.tags["name"],
    lat: e.lat,
    lon: e.lon

  }      
  updates['/point_of_interest/'+key] = data;      
  firebase.database().ref().update(updates);      
}) 

“results”是json格式的响应

【问题讨论】:

  • 你能提供一些代码作为起点吗?
  • 您的数据是什么样的?如果我们不知道该做什么,很难给出建议。
  • 是的,抱歉,我已经修改了问题。

标签: javascript json


【解决方案1】:

你可以使用类似的东西:

    var attrs = ["addr:city", "amenity", "addr:street", "name"];
    var labels = ["città", "tipologia", "indirizzo", "nome"]
    var data = { };

    attrs.forEach((a, i) => {
       if (e.tags[a]) { data[labels[i]] = e.tags[a]; }
    });

如果您可以从某处查询属性名称和标签,您甚至可以使其更具动态性。

【讨论】:

  • 谢谢,这很有用。由于我在 firebase 上有一个特定的结构(即您在“标签”中指定的结构),我可以使用它在我没有的字段中插入一个字符串,如“未定义”或“不存在”,这样每次我从 firebase 获取数据时,我都可以检查情况并采取相应的行动。
猜你喜欢
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
相关资源
最近更新 更多