将从API接收的JSON数组转换为Angular中的JSON对象

时间:2019-05-25 02:52:08

标签: angular typescript

我已经收到来自JSON数组的API的响应。 我想将其转换为相应的JSON对象,以便Material Table能够识别它。 API的响应- enter image description here

但是它没有在表中显示。 当我手动创建如下所示的Array对象时,将填充该表-     let ELEMENT_DATA = [ {"policyID":"119736","state":"Rajasthan","dummy":"no"}, {policyID:"119736",state:"Las Vegas",country:"USA"} ]; console.log(ELEMENT_DATA);

enter image description here

TABLE是动态。我无法为其创建预定义的类。

3 个答案:

答案 0 :(得分:2)

更新

function toJSON(input) {
  var UNESCAPE_MAP = {
    '\\"': '"',
    "\\`": "`",
    "\\'": "'"
  };
  var ML_ESCAPE_MAP = {
    '\n': '\\n',
    "\r": '\\r',
    "\t": '\\t',
    '"': '\\"'
  };

  function unescapeQuotes(r) {
    return UNESCAPE_MAP[r] || r;
  }

  return input.replace(/`(?:\\.|[^`])*`|'(?:\\.|[^'])*'|"(?:\\.|[^"])*"|\/\*[^]*?\*\/|\/\/.*\n?/g, // pass 1: remove comments
      function(s) {
        if (s.charAt(0) == '/')
          return '';
        else
          return s;
      })
    .replace(/(?:true|false|null)(?=[^\w_$]|$)|([a-zA-Z_$][\w_$]*)|`((?:\\.|[^`])*)`|'((?:\\.|[^'])*)'|"(?:\\.|[^"])*"|(,)(?=\s*[}\]])/g, // pass 2: requote
      function(s, identifier, multilineQuote, singleQuote, lonelyComma) {
        if (lonelyComma)
          return '';
        else if (identifier != null)
          return '"' + identifier + '"';
        else if (multilineQuote != null)
          return '"' + multilineQuote.replace(/\\./g, unescapeQuotes).replace(/[\n\r\t"]/g, function(r) {
            return ML_ESCAPE_MAP[r];
          }) + '"';
        else if (singleQuote != null)
          return '"' + singleQuote.replace(/\\./g, unescapeQuotes).replace(/"/g, '\\"') + '"';
        else
          return s;
      });
}

let array = [
  "{state:Haryanaa, country:India}",
  "{state:Goaa, country:India}"
];

let newarray = array.map(item => {
item = toJSON(item.replace(/"/g,"'"));
  return JSON.parse(item);
});


console.log(newarray);

您可以使用JSON.parse

   let newArray = Object.keys(myArray).map(item=>{
      return JSON.parse(myArray[item]);
    })

或者,如果您在服务器端使用php,则可以在将json_decode编码为json之前使用im = Image.new('RGB', (100, 100)) for x in range(100): for y in range(100): if y < 50: im.putpixel((x, y), (42, 214, 99)) else: im.putpixel((x, y), (206, 101, 10)) im.show()

答案 1 :(得分:1)

您是否尝试过将数据直接存储为数组?

ELEMENT_DATA: any = [];
this._endpoint.getData().subscribe(res => this.ELEMENT_DATA = res);

如果这是数据的结果,则它实际上是一个正确的JSON数据元素,因此它应在HTML结构中使用此元素。

*ngFor="let data of ELEMENT_DATA"

错误似乎发生在服务器端,结果中未引用的字符串是服务中的JSON字符串错误,您是否使用字符串生成器返回JSON?检查应用程序的服务器端。

答案 2 :(得分:0)

您可以这样操作,到目前为止它已写入控制台,

function convert() {
    var data = [
      "{policyID:119736,state:Rajasthan}",
      "{policyID:149737,state:Haryana}"
    ];

    var converted = data.map(d => {
         var str = d.replace(/([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)/g, "\"$1\":\"$2\"");
     return JSON.parse(str);
    });

    console.log(converted);
   }