Как преобразовать строку json в массив пользовательских объектов в модуле узла json2typescript NPM в TypeScript - PullRequest
0 голосов
/ 14 марта 2020

Я хочу преобразовать строку JSON в массив пользовательских объектов с помощью модуля json2typescript NPM. Я написал следующий код.

export class ValidationSummary {

    constructor(private column1: string, private column2: string, private column3: string,
        private column4: string, private column5: string, private column6: string,
        private column7: string) {

    }

    public get $column1(): string {
        return this.column1;
    }

    public set $column1(value: string) {
        this.column1 = value;
    }

    /** all getter and setter methods */

}

Я пишу код в классе TypeScript.

import {JsonConvert} from 'json2typescript';
const jsonConvert: JsonConvert = new JsonConvert();

        const valSummary: ValidationSummary[] = jsonConvert.deserializeObject(jsonString, ValidationSummary[]);

Я получаю следующее сообщение об ошибке.

Выражение доступа к элементу должно принимать аргумент.

Моя строка json выглядит следующим образом.

[
  {
    "column1": "Data-1",
    "column2": "Data-2",
    "column3": "Data-3",
    "column4": "Data-4",
    "column5": "Data-5",
    "column6": "Data-6",
    "column7": "Data-7"
  },
  {
    "column1": "Data-11",
    "column2": "Data-12",
    "column3": "Data-13",
    "column4": "Data-14",
    "column5": "Data-15",
    "column6": "Data-16",
    "column7": "Data-17"
  },
  {
    "column1": "Data-31",
    "column2": "Data-32",
    "column3": "Data-33",
    "column4": "Data-34",
    "column5": "Data-35",
    "column6": "Data-36",
    "column7": "Data-37"
  }
]

Я хочу массив объектов в следующей форме.

const valSummary: ValidationSummary[] = 
           jsonConvert.deserializeObject(jsonString, ValidationSummary[]);

1 Ответ

0 голосов
/ 14 марта 2020

Как я вижу, второй аргумент должен быть прототипом для десериализованных значений, например, вместо

jsonConvert.deserializeObject(jsonString, ValidationSummary[]);

try o

const arrOfObjects = [
  {
    "column1": "Data-1",
/ * .... */
  }
];
const convertor = (o) => jsonConvert.deserializeObject(o, ValidationSummary)

const valSummary: ValidationSummary[] = arrOfObjects.map(convertor);

Update

Ну, может быть эта реализация будет более полезной ...

import { JsonObject, JsonProperty, JsonConvert } from "json2typescript";
import example from "./example.js";

const arrOfObjects = JSON.parse(example);

@JsonObject('ValidationSummary')
class ValidationSummary {

  @JsonProperty("column1", String)
  private column1: string = undefined;


  public get $column1(): string {
    return this.column1;
  }

  public set $column1(value: string) {
    this.column1 = value;
  }
}

const jsonConvert: JsonConvert = new JsonConvert();

function convertor(o: any) {
  // @ts-ignore
  return jsonConvert.deserializeObject(o, ValidationSummary);
}

const valSummary: ValidationSummary[] = arrOfObjects.map(convertor);

// [ ValidationSummary { column1: 'Data-1' },
//  ValidationSummary { column1: 'Data-11' },
//  ValidationSummary { column1: 'Data-31' } ]


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...