简体   繁体   English

如何将json字符串转换为TypeScript中json2typescript NPM节点模块中的自定义对象数组

[英]How to convert json string to array of custom object in json2typescript NPM node module in TypeScript

I want to convert a JSON string to array of custom object using json2typescript NPM module.我想使用 json2typescript NPM 模块将 JSON 字符串转换为自定义对象数组。 I have written the following code.我已经编写了以下代码。

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 */

}

I am writing the code in a TypeScript class.我正在 TypeScript 类中编写代码。

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

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

I am getting the following error message.我收到以下错误消息。

An element access expression should take an argument.元素访问表达式应该带一个参数。

My json string is like this.我的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"
  }
]

I want the object array in the following form.我想要以下形式的对象数组。

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

As I see the second argument should be prototype for deserialized values, eg, instead正如我所见,第二个参数应该是反序列化值的原型,例如,

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更新

Well, may be that implementation will be more helpful...好吧,也许实施会更有帮助......

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' } ]


A simple way of deserializing the JSON into the ValidationSummary is:将 JSON 反序列化为ValidationSummary一种简单方法是:

const jsonParsed = JSON.parse(jsonString);    
const valSummaryArray = jsonParsed.map((a: any) => this.jsonConvert.deserializeObject(a, ValidationSummary));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM