簡體   English   中英

如何將json字符串轉換為TypeScript中json2typescript NPM節點模塊中的自定義對象數組

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

我想使用 json2typescript NPM 模塊將 JSON 字符串轉換為自定義對象數組。 我已經編寫了以下代碼。

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[]);

正如我所見,第二個參數應該是反序列化值的原型,例如,

jsonConvert.deserializeObject(jsonString, ValidationSummary[]);

試試吧

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

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

更新

好吧,也許實施會更有幫助......

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


將 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