检查字符串是不是是 Typescript 中的有效 JSON

     2023-03-13     182

关键词:

【中文标题】检查字符串是不是是 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

【讨论】:

如何检查字符串是不是是android中的有效电子邮件? [复制]

】如何检查字符串是不是是android中的有效电子邮件?[复制]【英文标题】:Howtocheckifastringisavalidemailinandroid?[duplicate]如何检查字符串是否是android中的有效电子邮件?[复制]【发布时间】:2019-10-0610:48:34【问题描述】:我正在尝试... 查看详情

如何检查给定字符串是不是是Java中的有效JSON

】如何检查给定字符串是不是是Java中的有效JSON【英文标题】:HowtocheckwhetheragivenstringisvalidJSONinJava如何检查给定字符串是否是Java中的有效JSON【发布时间】:2012-04-2719:53:08【问题描述】:如何在Java中验证JSON字符串?或者我可以... 查看详情

如何检查字符串文字类型是不是包含 TypeScript 中的值?

】如何检查字符串文字类型是不是包含TypeScript中的值?【英文标题】:HowdoIcheckthatStringLiteralTypescontainavalueinTypeScript?如何检查字符串文字类型是否包含TypeScript中的值?【发布时间】:2020-02-2317:11:46【问题描述】:我想检查str是... 查看详情

将 json 解析为 typescript 中的接口并检查是不是正常

】将json解析为typescript中的接口并检查是不是正常【英文标题】:Parsingjsontointerfaceintypescriptandcheckifitisok将json解析为typescript中的接口并检查是否正常【发布时间】:2020-12-1702:53:33【问题描述】:如何将Json字符串解析为嵌套接口... 查看详情

如何检查字符串是不是是有效的 XML 元素名称?

】如何检查字符串是不是是有效的XML元素名称?【英文标题】:HowtocheckifstringisavalidXMLelementname?如何检查字符串是否是有效的XML元素名称?【发布时间】:2011-01-3123:13:37【问题描述】:我需要一个正则表达式或PHP中的函数来验证... 查看详情

Java 检查字符串是有效的 JSON 还是有效的 XML,或者两者都不是

】Java检查字符串是有效的JSON还是有效的XML,或者两者都不是【英文标题】:JavacheckifastringisvalidJSONorvalidXMLorneither【发布时间】:2017-09-0922:27:39【问题描述】:我正在编写一个函数来检查输入字符串是有效的JSON还是有效的XML,或... 查看详情

C++:检查字符串是不是是有效的 MD5 十六进制哈希

】C++:检查字符串是不是是有效的MD5十六进制哈希【英文标题】:C++:CheckifstringisavalidMD5hexhashC++:检查字符串是否是有效的MD5十六进制哈希【发布时间】:2013-11-0200:48:06【问题描述】:如何正确检查std::string是否是C++上的有效MD5... 查看详情

检查字符串是不是与python中的IP地址模式匹配?

】检查字符串是不是与python中的IP地址模式匹配?【英文标题】:checkifastringmatchesanIPaddresspatterninpython?检查字符串是否与python中的IP地址模式匹配?【发布时间】:2011-03-2815:03:26【问题描述】:检查字符串是否匹配特定模式的最... 查看详情

如何检查给定的字符串是不是是 Windows 下的合法/有效文件名?

】如何检查给定的字符串是不是是Windows下的合法/有效文件名?【英文标题】:HowdoIcheckifagivenstringisalegal/validfilenameunderWindows?如何检查给定的字符串是否是Windows下的合法/有效文件名?【发布时间】:2010-09-0822:22:20【问题描述】... 查看详情

确定字符串输入是不是可以是 Python 中的有效目录

】确定字符串输入是不是可以是Python中的有效目录【英文标题】:DetermineifstringinputcouldbeavaliddirectoryinPython确定字符串输入是否可以是Python中的有效目录【发布时间】:2013-07-0715:32:11【问题描述】:我正在编写样板来处理稍后将... 查看详情

在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码

】在C#中以编程方式检查字符串是不是包含有效的C#代码【英文标题】:CheckifastringcontainsvalidC#codeprogramaticallyinC#在C#中以编程方式检查字符串是否包含有效的C#代码【发布时间】:2021-10-3019:37:25【问题描述】:我有一个包含C#代码... 查看详情

java.io.File 中的空字符是不是对存在检查有效?

】java.io.File中的空字符是不是对存在检查有效?【英文标题】:Arenullcharactersinjava.io.Filevalidforexistscheck?java.io.File中的空字符是否对存在检查有效?【发布时间】:2012-12-1702:33:28【问题描述】:当java.io.File中的文件名中遇到空值时... 查看详情

使用 jq 检查字符串是不是是有效的 JSON

】使用jq检查字符串是不是是有效的JSON【英文标题】:CheckifstringisavalidJSONwithjq使用jq检查字符串是否是有效的JSON【发布时间】:2018-04-0720:35:37【问题描述】:我需要在解除服务时发现错误。响应可以是null,类似的字符串错误信... 查看详情

检查字符串是不是是有效的 Windows 目录(文件夹)路径

】检查字符串是不是是有效的Windows目录(文件夹)路径【英文标题】:CheckifastringisavalidWindowsdirectory(folder)path检查字符串是否是有效的Windows目录(文件夹)路径【发布时间】:2011-03-0909:40:03【问题描述】:我正在尝试确定用户... 查看详情

如何检查字符串是不是为有效日期

】如何检查字符串是不是为有效日期【英文标题】:Howtocheckifastringisavaliddate如何检查字符串是否为有效日期【发布时间】:2011-02-2616:52:21【问题描述】:我有一个字符串:"31-02-2010"并想检查它是否是有效日期。最好的方... 查看详情

检查字符串是不是是十六进制数的有效表示

】检查字符串是不是是十六进制数的有效表示【英文标题】:Checkifstringisvalidrepresentationofhexnumber检查字符串是否是十六进制数的有效表示【发布时间】:2014-11-1400:41:57【问题描述】:对于regex,我完全是菜鸟。我的目标是检查字... 查看详情

如何在 Python 中检查字符串是不是是有效的 JSON?

】如何在Python中检查字符串是不是是有效的JSON?【英文标题】:HowdoIcheckifastringisvalidJSONinPython?如何在Python中检查字符串是否是有效的JSON?【发布时间】:2011-07-2709:10:04【问题描述】:在Python中,有没有办法在尝试解析字符串之... 查看详情

Nodejs检查给定的字符串是不是是有效的文件系统路径而不实际检查文件系统

】Nodejs检查给定的字符串是不是是有效的文件系统路径而不实际检查文件系统【英文标题】:NodejscheckifthegivenstringisavalidfilesystempathwithoutactuallycheckingthefilesystemNodejs检查给定的字符串是否是有效的文件系统路径而不实际检查文件... 查看详情