有没有办法在Typescript中将字符串解析为JSON ? 示例:在JS中,我们可以使用JSON.parse()。Typescript中有类似的函数吗?

我有一个JSON对象字符串如下:

{"name": "Bob", "error": false}

当前回答

Typescript是javascript的超集,所以你只需要使用JSON。像在javascript中那样解析:

let obj = JSON.parse(jsonString);

只有在typescript中,你才能有结果对象的类型:

interface MyObj {
    myString: string;
    myNumber: number;
}

let obj: MyObj = JSON.parse('{ "myString": "string", "myNumber": 4 }');
console.log(obj.myString);
console.log(obj.myNumber);

(操场上的代码)

其他回答

TS有JavaScript运行时

Typescript有JavaScript运行时,因为它被编译成JS。这意味着作为语言一部分内置的JS对象,如JSON、Object和Math,也可以在TS中使用。因此,我们可以只使用JSON。parse方法来解析JSON字符串。

例子:

const JSONStr = '{"name": "Bob", "error": false}'

// The JSON object is part of the runtime
const parsedObj = JSON.parse(JSONStr);

console.log(parsedObj);
// [LOG]: {
//   "name": "Bob",
//   "error": false
// } 

// The Object object is also part of the runtime so we can use it in TS
const objKeys = Object.keys(parsedObj);

console.log(objKeys);
// [LOG]: ["name", "error"] 

现在唯一的问题是parsedObj是any类型,这在TS中通常是一个不好的做法。如果我们使用类型守卫,我们可以类型对象。这里有一个例子:

const JSONStr = '{"name": "Bob", "error": false}'
const parsedObj = JSON.parse(JSONStr);

interface nameErr {
  name: string;
  error: boolean;
}

function isNameErr(arg: any): arg is nameErr {
  if (typeof arg.name === 'string' && typeof arg.error === 'boolean') {
    return true;
  } else {
    return false;
  }
}

if (isNameErr(parsedObj)) {
  // Within this if statement parsedObj is type nameErr;
  parsedObj
}

Typescript是javascript的超集,所以你只需要使用JSON。像在javascript中那样解析:

let obj = JSON.parse(jsonString);

只有在typescript中,你才能有结果对象的类型:

interface MyObj {
    myString: string;
    myNumber: number;
}

let obj: MyObj = JSON.parse('{ "myString": "string", "myNumber": 4 }');
console.log(obj.myString);
console.log(obj.myNumber);

(操场上的代码)

是的,在TypeScript中这有点棘手,但你可以像这样做下面的例子

let decodeData = JSON.parse(' ${jsonResponse} ');

嘿,如果你对json对象进行typeof,结果是typescript类型的字符串。你可以在这里阅读更多:Typescript:字符串和字符串的区别

所以试试这个方法,它会起作用的

JSON.parse(String({"name": "Bob", "error": false}))

你还可以使用一些库来执行json的类型验证,比如Sparkson。它们允许你定义一个TypeScript类,你想解析你的响应,在你的情况下,它可以是:

import { Field } from "sparkson";
class Response {
   constructor(
      @Field("name") public name: string,
      @Field("error") public error: boolean
   ) {}
}

该库将验证所需字段是否出现在JSON有效负载中,以及它们的类型是否正确。它还可以执行一系列验证和转换。