检查字符串是不是是 Typescript 中的有效 JSON
Posted
技术标签:
【中文标题】检查字符串是不是是 Typescript 中的有效 JSON【英文标题】:Check if a string is a valid JSON in Typescript检查字符串是否是 Typescript 中的有效 JSON 【发布时间】:2022-01-19 21:00:06 【问题描述】:有很多关于如何在 javascript 中执行此操作的资料,但在 Typescript 中似乎并不那么简单。我想检查一个字符串是否是有效的 JSON,我尝试了以下代码:
function isJSON(str)
try
JSON.parse(str);
catch (e)
return false;
return true;
但无论我尝试什么字符串,它都不会抛出错误,即使是随机字符串,例如“[asc,22”
我也试过这个:
function testJSON(strJson)
try
const parsed = JSON.parse(strJson)
if (parsed && typeof parsed === "object")
return true
catch return false
return false
但是在这种情况下,无论使用什么字符串,它都会返回 false,我不明白为什么,但是 JSON.parse() 函数总是返回一个字符串,无论我传递什么。
我希望函数有这样的结果:
"123" => false
"abc" => false
" "prop_1": "val_1", "prop_2": "val_2" " => true
" prop_1: "val_1", "prop_2": "val_2" " => false
编辑: 在在线平台 typescriptlang.org 上验证后,这在 Typescript 中有效,我不确定 ReactJS 是否有问题,我正在使用的文件类型为 .tsx
编辑 2: 这个问题原来与打字稿或反应无关,但代码在其他地方滥用了“JSON.stringify”方法,答案贴在下面。
【问题讨论】:
这能回答你的问题吗? How to test if a string is JSON or not? 您的第一个函数运行良好。你所期待的究竟是什么? “但无论我尝试什么字符串,它都不会抛出错误” 它会抛出什么错误?如果您单击“运行”按钮here,它似乎工作得很好。我所做的只是将: string
类型注释添加到您的参数中。
结果当我运行我在 typescriptlang.org 中提到的第二个函数时,它确实根据我的需要工作......但我不明白为什么它不在我的代码中运行,我现在注意到了我没有提到我正在使用 ReactJS 并且文件类型是 .tsx 而不是 .ts,我不知道这可能如何影响结果
【参考方案1】:
JSON.parse()
如果输入不正确,throw
会抛出异常,您只是在 catch
块中捕获它,通过运行下面的 sn-p 进行验证。
console.log(JSON.parse("sqdfq["));
【讨论】:
结果当我在 typescriptlang.org 中运行它时它确实可以工作,但我不明白为什么它没有在我的代码中运行,我使用的是 ReactJS 并且我的文件是一个 .tsx 文件。我将编辑我的问题,以防万一它有任何影响【参考方案2】:你是对的,但是在这里展示一个好/坏的例子。
let badJSON = `'""bad bad"'"`;
let goodJSON = `"type":"pong"`;
let CheckJSON = (Data) =>
try
let message = JSON.parse(Data);
if (message.type == "pong")
console.log("PING");
catch (e)
console.warn("close:");
;
CheckJSON(goodJSON);
CheckJSON(badJSON);
https://***.com/questions/70384627/check-if-a-string-is-a-valid-json-in-typescript#
【讨论】:
这在我的代码中不起作用,但我发现这在 Typescript 中不是问题并更新了我的问题,我不确定这是否是 React 和 tsx 文件类型的问题。当我在我的代码中尝试你的函数时,console.log(message.type) 返回未定义,我不知道为什么......【参考方案3】:事实证明,我在问题中提到的第二个函数毕竟根据我的需要工作,发生的事情是在我的代码深处,作为字符串的输入在传递给方法之前再次被字符串化,这意味着当我解析它时,它总是返回一个字符串并且从不抛出错误。 我没有注意到 JSON.stringify 并且没有很好地理解它的行为,这很糟糕。
那么这个问题的正确答案就是问题中提到的:
function testJSON(strJson)
try
const parsed = JSON.parse(strJson)
if (parsed && typeof parsed === "object")
return true
catch return false
return false
【讨论】:
以上是关于检查字符串是不是是 Typescript 中的有效 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何检查字符串文字类型是不是包含 TypeScript 中的值?
将 json 解析为 typescript 中的接口并检查是不是正常