【问题标题】:Convert Postgres JSONB array into Javascript array of JSON elements将 Postgres JSONB 数组转换为 JSON 元素的 Javascript 数组
【发布时间】:2015-10-24 22:36:09
【问题描述】:

我在使用 postgresql(9.4) 和 javascript 时遇到了一些问题。我正在尝试将 jsonb[] 数据类型转换为 javascript 中的 json 值的数组/列表。为简单起见,我的示例仅包含数组中的一个元素(json)。

var s = { "player": "{\"{\\\\\"username\\\\\": \\\\\"JetJet13\\\\\", \\\\\"points\\\\\": 525, \\\\\"level\\\\\": 3"}\"}" };

这是我迄今为止尝试过的。

JSON.parse(s.player); //this gives an error: SyntaxError: Unexpected token }

这就是我要找的东西。

var s = { "player": [ {"username": "JetJet13", "points": 525, "level": 3} ] };

任何帮助将不胜感激。

【问题讨论】:

  • 您提供的作为 Postgres 输出的字符串与您想要的解析结果不匹配 - Postgres 生成的 JSON 并未将数组声明为 player 的值,而是声明为对象(这是非法的,从解析时产生的错误可以看出)。你是如何从 Postgres 生成 JSON 的?
  • '{1, 2, 3, 4}' 是一个数组在 postgres 中的样子。看看这个问题stackoverflow.com/questions/20699196/…

标签: javascript arrays json postgresql


【解决方案1】:

好的,我设法弄清楚如何获得我想要的结果。

我创建了一个函数来让事情变得更简单。请注意,语法荧光笔与我的正则表达式混淆了。更正/替代正则表达式将不胜感激。我使用 Sublime Text 3,它也没有正确解释正则表达式。

var convertJSONarray = function(s){

  var step1 = s.replace(/"{/g,'{').replace(/}"/g,'}').replace(/\\/g,"");
  //step1 = "{ {}, {}, {},...}"
  var step2 = "[" + step1.slice(1,-1) + "]";
  // step2 = "[ {}, {}, {}, ...]"
  var step3 = JSON.parse(step2);
  // step3 = [ {}, {}, {}, ...] the desired result :)
  return step3;
 };

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2016-05-27
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    相关资源
    最近更新 更多