【问题标题】:JSON stringify re-structureJSON stringify 重构
【发布时间】:2018-12-15 12:11:21
【问题描述】:

我有一个数据库,有多个单元格,每个单元格下都有值。

单元格是:id、name、duration、date 和 relationid

我有这个代码:

var result = {} 
properties.data.forEach(addToResult); //Get data from database using properties.data
    
instance.data.datavarb = JSON.stringify(result); //Send data after converted to JSON
      
function addToResult(pair,isjson){ //operations
if(isjson===true) result[pair.key] = JSON.parse(pair.value); else result[pair.key] = pair.value;
}

我面临两个问题:

1- 第一个问题: 这就是我在转换为 JSON 后获取值的方式:

{"id":"1","name":"Football","duration":"12","date":"02-07-2018","relationid":null}

我需要怎样:

{id:1, name:"Football", duration:12, date:"02-07-2018", relationid:null}

需要从数字(id、duration 和 relationid)和 id、duration、relationid 值中删除 "" 引号。

2- 第二个问题: 在问题 1 中,只是为了向您展示,我只是从我的数据库中解析三个值之一。当我全部解析它们时会发生什么?看起来是这样的:

{"id":"1, 2, 3","name":"Football, France, Belgium","duration":"12, 4, 3","date":"02-07-2018, 08-07-2018, 10-07-2018","relationid":", 1, 1"}

它不是一一创建,而是创建相同的标识符(id、name、duration)并将所有值放在相同的位置。为了我的目的,我需要:

{id:1, name:"Football", duration:12, date:"02-07-2018", relationid:null},
{id:2, name:"France", duration:4, date:"08-07-2018", relationid:1},
{id:3, name:"Belgium", duration:3, date:"10-07-2018", relationid:1}

非常感谢!!

【问题讨论】:

  • JSON 坚持必须引用属性名称;如果不是,则不是 JSON。
  • JSON 没有将值转换为字符串,它们必须是原始 properties.data 中的字符串。
  • 感谢您的回答@Pointy,但我正在尝试使用此资源:docs.dhtmlx.com/gantt/desktop__loading.html 检查他们的加载数据是如何工作的。
  • @K3ny1 如果您查看他们的 tasks.json 示例,它的属性名称周围有引号。
  • JSON 的键总是字符串,即使你没有在它们上面加上双引号。那么有什么问题呢?

标签: javascript arrays json stringify


【解决方案1】:

您可以测试这些值是否看起来像整数,并对其进行解析。

function addToResult(pair,isjson){ //operations
    if(isjson===true) {
        result[pair.key] = JSON.parse(pair.value); 
    } else if (/^\d+$/.test(pair.value)) {
        result[pair.key] = Number(pair.value);
    } else {
        result[pair.key] = pair.value;
    }
}

【讨论】:

  • 您好,现在将对其进行测试,顺便说一句,我认为 else if 缺少 a) 谢谢!
  • 是的,我一直在这里这样做,太习惯于自动平衡的IDE......
  • Hello Barmar 似乎代码运行良好,但我面临一个小问题,即我的代码在从数据库中获取值之前正在运行,并返回一个缺失值错误。
  • 这段代码应该在数据库查询的回调函数中。
  • 非常感谢@Barmar,我已经很接近了。我还需要从 id、name、duration、date 标题中删除“”。有可能像你一样吗?
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 2017-11-18
  • 2016-02-20
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多