从SQL Server格式化json的“正确”方法是什么?

时间:2019-02-13 18:51:57

标签: json sql-server parsing

我有一个存储过程返回json。 proc正常运行,当我在SSMS中调用它时,它返回一个json对象,可以单击该对象并将其视为有效的json。当我通过Visual Studio调用它时,它会执行相同的操作,然后单击并按回车键会很好地对其进行格式化,以使其可读(而不是全部都在一行中)。如果我采用字符串并将其传递回sql函数IsJson,它也会返回true,因此我100%确信从proc出来的json是有效的。

但是,我的前端开发人员无法解析它,并且它似乎归结为试图将其转换为某个地方的某种东西。

json(作为proc输出):

{“ APIResult”:[{“ ID”:200,“ Status_Message”:“成功”,“ Developer_Message”:“ D56D10AC-3A74-42FC-8BB5-F783A6C0C556 33E4F907-F1E5-4F1B-8CA5-5521291E683A的成功登录(AppID :(空))。“,” User_Message“:”成功登录“,” User“:[{” ID“:” D56D10AC-3A74-42FC-8BB5-F783A6C0C556“}]}]}}}

使用邮递员访问实时API(或本地主机),我获得了我期望的数据(如上),但是,它将整个内容包装在双引号中,并在每个元素周围转义了所有双引号,所以我得到: / p>

“ {\” APIResult \“:[{\” ID \“:200,\” Status_Message \“:\”成功\“,\” Developer_Message \“:\”成功登录D56D10AC-3A74-42FC- 8BB5-F783A6C0C556 33E4F907-F1E5-4F1B-8CA5-5521291E683A(AppID:(空))。\“,\” User_Message \“:\”成功登录\“,\” User \“:[{\” ID \“: \“ D56D10AC-3A74-42FC-8BB5-F783A6C0C556 \”}]}}}“”

当我尝试在sql中(使用isjson)解析此错误时,它返回false。但是,尽管jsonlint.com将相同的代码解析为有效。通过开发人员正在使用的http://json.parser.online.fr解析器对其进行尝试,也会将其作为错误抛出。

我可以告诉开发人员删除第一个和最后一个字符,并将每个\“替换为”,但这似乎有点麻烦。

json是否有不同的解释?我已经读到,这通常是由调用应用程序期望它需要进行json-ify的字符串引起的,并且因为它正在获取json对象,所以它正在对json进行json-ification,但是即使我强制sql server将字符串输出为字符串,而不是json,看起来还是一样。 SQL肯定可以正确地将其推出,但是无论我的开发人员通过哪种方式调用api,都将返回与邮递员相同的格式,并且不喜欢它。如何确保调用代码得到的是SQL提供的内容而不是一些奇怪的解释?

1 个答案:

答案 0 :(得分:0)

@Tim尝试反序列化存储过程的输出。在C#中使用JSonConvert.Derialize

相关问题