我有一个输入文本,用户必须输入Json格式的字符串,例如:
"test":"value",
"test2":"value2"
提交输入时,我想将其用作Map并将其传递给我的端点。在输入中写入值以便创建Map的正确方法是什么?如果我通过此输入,则表示地图创建不正确。
我所做的是:
variables:Map = myInput;
或
let variables:Map<String,any> = new Map(myInput);
,然后尝试遍历键集,但是没有用。如何从字符串输入创建Map,并检查是否正确?输入字符串被视为Map的正确语法是什么?
答案 0 :(得分:0)
您可以使用JSON.parse()
来解析输入文本,当它与Object
相对应时,您可以使用Map
轻松地将其转换为Object#entries()
:
const map = new Map(Object.entries(JSON.parse(inputValue)));
注意,Object#entries()
是es2017功能。确保在es2017
的{{1}}部分加入lib
:
tsconfig.json
这是一个反应式表单验证器的最小示例,用于检查JSON代码是否有效并与对象相对应:
{
"compilerOptions": {
...
"lib": [
...,
"es2017"
]
}
关于const jsonValidator: ValidatorFn = (control: AbstractControl) => {
try {
const obj = JSON.parse(control.value);
if (typeof obj !== 'object' || Array.isArray(obj)) {
throw new TypeError('Top level node should be an object');
}
} catch (error) {
return {
parseError: error,
};
}
return null;
};
的显式键入:如果您只想在代码中接受某些类型的值,则可以在验证中添加一些检查:
Map
检查键没有任何意义,因为在JSON中它们只能是字符串。
下面是一个完整的示例:https://stackblitz.com/edit/angular-dnmfrg