我正在用JSON格式编写一些数据文件,并希望将一些非常长的字符串值分成多行.使用python的JSON模块我得到了很多错误,无论是使用\还是\n作为转义.
是否可以在JSON中使用多行字符串?这主要是为了视觉上的舒适,所以我想我可以在我的编辑器中翻开自动换行,但我只是有点好奇......
我必须形成一个JSON字符串,其中一个值具有换行符.这必须转义然后使用AJAX调用发布.任何人都可以建议使用JavaScript来逃避字符串.我没有使用jQuery.
我有以下格式的json响应.
"[{\\\"JobID\\\":\\\"1\\\",\\\"BillGenerationDate\\\":\\\"4/29/2013 2:53:34 PM\\\",\\\"BillID\\\":\\\"115743\\\",\\\"BillNo\\\":\\\"115743\\\",\\\"CustomerID\\\":\\\"4041705\\\",\\\"PayStatus\\\":\\\"0\\\",\\\"PaymentRequiredStatus\\\":\\\"True\\\",\\\"ProductName\\\":\\\"Epic FBO test\\\",\\\"Description\\\":\\\"Epic Automation 2\\\\r\\\\n\\\",\\\"ProductType\\\":\\\"eBill \\\",\\\"DueType\\\":\\\"-1\\\",\\\"DueDate\\\":\\\"2013-03-15\\\",\\\"Amount\\\":\\\"63.70\\\",\\\"Cost\\\":\\\"\\\"},
{\\\"JobID\\\":\\\"9\\\",\\\"BillGenerationDate\\\":\\\"5/2/2013 10:21:39 AM\\\",\\\"BillID\\\":\\\"115743\\\",\\\"BillNo\\\":\\\"115743\\\",\\\"CustomerID\\\":\\\"4041705\\\",\\\"PayStatus\\\":\\\"0\\\",\\\"PaymentRequiredStatus\\\":\\\"True\\\",\\\"ProductName\\\":\\\"FBO Test Product\\\",\\\"Description\\\":\\\"FBO Product Test\\\",\\\"ProductType\\\":\\\"eBill \\\",\\\"DueType\\\":\\\"-1\\\",\\\"DueDate\\\":\\\"2013-05-01\\\",\\\"Amount\\\":\\\"150.70\\\",\\\"Cost\\\":\\\"\\\"}]
Run Code Online (Sandbox Code Playgroud)
我相信json.net处理转义字符,我使用下面的代码将其反序列化为字典集合.
var billList = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(contentCorrected);
Run Code Online (Sandbox Code Playgroud)
但是这个json解析会抛出异常"无效的属性标识符:.Path'[0]',第1行,第2位." 我们可以通过操纵json响应字符串来解决这个问题吗?
我创建了一个存储过程来从 SQL Server 数据库中以 JSON 对象的形式提取数据。我的所有数据都是相关的,我试图将其作为 JSON 字符串获取。
目前,我可以很好地从 SQL Server 中获取 JSON 字符串,但是该对象始终包含转义字符(例如“{\”field\”:\“value\”})。我想提取相同的内容JSON,但没有转义字符。为了测试这一点,我使用了一些简单的查询,并使用SqlDataAdapter我的存储过程将它们输入.NET。
让我困惑的是,当我在 SSMS 中运行查询时,我从未看到任何转义字符,但是一旦它拉出 .NET 应用程序,转义字符就会出现。我想防止这种情况发生,并让我的应用程序仅获取未转义的 JSON 字符串。
我尝试了在研究过程中发现的一些建议,但没有产生我想要的结果。我所看到的更改(记录在 MSDN 和其他 SO 帖子中)涉及获取未转义的结果,但仅限于 SSMS 内,而不是其他应用程序内。
我尝试过的:
简单的 Json 查询设置为参数,然后使用 JSON_QUERY 来选择参数:
DECLARE @JSON varchar(max)
SET @JSON = (SELECT '{"Field":"Value"}' AS myJson FOR JSON PATH)
SELECT JSON_QUERY(@JSON) AS 'JsonResponse' FOR JSON PATH
Run Code Online (Sandbox Code Playgroud)
这会在 .NET 应用程序中生成以下内容:
"[{\"JsonResponse\":{\"Field\":\"Value\"}}]"
Run Code Online (Sandbox Code Playgroud)
这会在 SSMS 中生成以下内容:
[{"JsonResponse":[{"myJson":"{\"Field\":\"Value\"}"}]}]
Run Code Online (Sandbox Code Playgroud)
使用 JSON_QUERY 进行不带参数的简单 Json 查询:
SELECT JSON_QUERY('{"Field":"Value"}') AS 'JsonResponse' FOR JSON PATH
Run Code Online (Sandbox Code Playgroud)
这会在 .NET 应用程序中生成以下内容
"[{\"JsonResponse\":{\"Field\":\"Value\"}}]" …Run Code Online (Sandbox Code Playgroud)