格式化Curl返回的Json字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了格式化Curl返回的Json字符相关的知识,希望对你有一定的参考价值。

参考技术A 经常会用到curl调试接口,服务器返回的是json,不过这些json是没有格式化的,不方便阅读。

经过搜索和实验,发现下面2中方式比较方便。

示例:

在curl命令后面添加 | python -m json.tool 即可。

如下所示

如果不想显示curl的统计信息,可以参考这篇 文章 ,添加 -s 参数即可。

用nvm安装一个json库,这里是库的 地址 文档。

安装 json 命令

在curl命令后面添加 | json 即可。

如下所示:

如何使用 CURL 转义部分 JSON POST 请求中的字符?

【中文标题】如何使用 CURL 转义部分 JSON POST 请求中的字符?【英文标题】:How to escape characters in part of a JSON POST request with CURL? 【发布时间】:2012-08-23 07:31:51 【问题描述】:

所以,我正在尝试使用名为 Postmark 的服务来发送格式化的 HTML 电子邮件。他们有一些 API 文档here,并给出了如何使用 CURL 的示例:

$: curl -X POST "http://api.postmarkapp.com/email" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Postmark-Server-Token: ed742D75-5a45-49b6-a0a1-5b9ec3dc9e5d" \
-v \
-d "From: 'sender@example.com', To: 'receiver@example.com', Subject: 'Postmark test', HtmlBody: '<html><body><strong>Hello</strong> dear Postmark user.</body></html>'"

所以,当我使用自己的令牌时,这一切都很好并且工作得很好。问题是当我添加自己的 HtmlBody 时。如果我发送一条简单的消息,它就可以正常工作。一旦我添加某些特殊字符,它就会中断。例如,如果我这样做:

-d "From: 'sender@example.com', To: 'receiver@example.com', Subject: 'Postmark test', HtmlBody: '<!DOCTYPE html><html><body><strong>Hello</strong> dear Postmark user.</body></html>'"

因为! 而中断。我该如何解决这个问题?


更新:正如 sourcejedi 所指出的,我正在从 shell (bash) 运行它,所以 ! 问题现在对我来说很有意义。我将 JSON 字符串移动到一个名为 email.json 的单独文件中,并使用 -d @email.json 加载它。这适用于带有&lt;!DOCTYPE&gt; 的简单电子邮件,但是当我尝试加载完整的 HTML 时仍然收到以下错误:

"ErrorCode":402,"Message":"Received invalid JSON input."

我相信这与其他一些特殊字符有关。当我使用 --data-urlencode @email.json 时,我得到了同样的错误。

【问题讨论】:

【参考方案1】:

你需要使用--data-urlencode,所以应该是curl -X POST --data-urlencode

当我最终测试时..

* About to connect() to api.postmarkapp.com port 80 (#0)
*   Trying 50.56.54.211... connected
> POST /email HTTP/1.1
> User-Agent: curl/7.23.1 (x86_64-pc-win32) libcurl/7.23.1 OpenSSL/0.9.8r zlib/1
.2.5
> Host: api.postmarkapp.com
> Accept: application/json
> Content-Type: application/json
> X-Postmark-Server-Token: ed742D75-5a45-49b6-a0a1-5b9ec3dc9e5d
> Content-Length: 164

【讨论】:

似乎仍然让我失望,只是返回:-bash: !DOCTYPE: event not found 我刚刚测试了同样的结果。它工作正常.. 你确定你收到错误.. 看看我得到的测试输出。我还收到了应用程序错误Bad or missing server or user API token,因为我使用了预期的错误服务器令牌。【参考方案2】:

我仍然觉得只是返回:-bash: !DOCTYPE: event not found

这是来自 bash shell 的错误。你需要逃脱!作为 \!你自己。但我认为,你最好从文件中读取。而不是-d data 使用-d @datafile。 (或-d @- 从标准输入读取)。

【讨论】:

在这种情况下,我是否将整个 JSON 字符串放在一个文件中? @ralphthemagician 是的,应该可以。只要您不尝试使用“echo”从外壳创建它,因为那样您就会遇到完全相同的问题:)。 (“cat”,或者基于控制台的编辑器就可以了)。 我试过了。有用。排序。这 !不再是问题,但我收到 "ErrorCode":402,"Message":"Received invalid JSON input."当我尝试使用完整的 HTML 标记时。我认为这与样式部分中的 有关。不过,这似乎是朝着正确方向迈出的一步。 在不知道输入的情况下无法真正猜出问题。但不难找到一种验证 JSON 语法的方法。如果没有想到,只需搜索即可找到基于网络的验证器。【参考方案3】:

我曾经在发布 JSON 数据时收到同样的错误。我所做的是将数据用单引号括起来并使用双引号作为字符串:

所以来自:

-d "From: 'sender@example.com', To: 'receiver@example.com', Subject: 'Postmark test', HtmlBody: '<html><body><strong>Hello</strong> dear Postmark user.</body></html>'"

使用:

-d 'From: "sender@example.com", To: "receiver@example.com", Subject: "Postmark test", HtmlBody: "<html><body><strong>Hello</strong> dear Postmark user.</body></html>"'

希望这会有所帮助。

【讨论】:

以上是关于格式化Curl返回的Json字符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CURL 转义部分 JSON POST 请求中的字符?

PHP Curl,在 application/json 中请求数据返回

【json.tool】关于python -m json.tool中文乱码问题的处理

如何将JSON字符串格式化输出

将字符串(类似json格式)转换为对象或数组

curl发送json格式数据