在写入文件之前美化 JSON 的 cURL 下载

2023-12-03

我正在使用 cURL 7.39.0 调用 REST Web 服务并将响应写入.json file:

curl -L-X POST -b cookies.txt -H "Content-Type: application/json" http://localhost:7001/web/service/url -d {"param1":"value1"} -o "C:\output\serviceName.json" 

响应将写入输出文件,但不进行格式化:

{"status": "success","user": "name", "regId": "14420","subscriber": [{"memberFor":"3 years","lastLogin":"2 days ago"}]}

我的问题是:

  1. 有没有办法在将 JSON 响应写入输出文件之前对其进行格式化(如下所示)?

    {
        "status": "success",
        "user": "name",
        "regId": "14420",
        "subscriber": [
            {
                "memberFor":"3 years",
                "lastLogin":"2 days ago"     
            }
        ]
    }
    
  2. 如果无法通过 cURL 进行格式化,我希望编写一个简单的批处理文件来自动打开 JSON 输出文件并应用格式化。就像是:

    @echo off
    cls
    "C:\Program Files\Notepad++\notepad++" "C:\output\serviceName.json" 
    pause
    

批处理/控制台中是否有可用的标志/选项来实现此目的?


Edit:我找到了一个解决方案,使用htmlfileCOM 对象,它应该提供最快的性能(至少对于单次运行)并且不需要 Internet 连接。请参阅此答案中的最后一个解决方案。


因为您使用 [batch-file] 标签标记了这个问题,并且因为我发现这个挑战很有趣,所以我编写了一个混合批处理 + JScript 脚本来美化您的 JSON。自从JScript 5.7 本身不支持 JSON 对象,此脚本使用外部 json2.js,如果尚未下载,则通过 XHR 下载它。从那里,调用熟悉的 JavaScript 就很简单了JSON.stringify()方法及其美化选项。

Syntax:

json_generator | batfile.bat
    -or-
batfile.bat < jsonfile.json

用法示例:

beautify.bat < "C:\output\serviceName.json" > "C:\output\beautified.json"

这会导致以下内容保存为 beautified.json:

{  
        "status": "success",
        "user": "name",
        "regId": "14420",
        "subscriber": [
                {
                        "memberFor": "3 years",
                        "lastLogin": "2 days ago"
                }
        ]
}

代码:

@if (@CodeSection == @Batch) @then

@echo off & setlocal

cscript /nologo /e:JScript "%~f0"
goto :EOF

@end // end Batch / begin JScript hybrid chimera

var xObj = WSH.CreateObject('Microsoft.XMLHTTP'),
    fso = WSH.CreateObject('Scripting.FileSystemObject'),
    temp = WSH.CreateObject('WScript.Shell').Environment('Process')('temp'),
    j2lib = 'https://raw.githubusercontent.com/douglascrockford/JSON-js/master/json2.js',
    json = WSH.StdIn.ReadAll();

if (fso.FileExists(temp + '\\json2.js')) {
    j2lib = fso.OpenTextFile(temp + '\\json2.js', 1);
    eval(j2lib.ReadAll());
    j2lib.Close();
}
else {
    with (xObj) {
        open("GET", j2lib, true);
        setRequestHeader('User-Agent', 'XMLHTTP/1.0');
        send('');
    }

    while (xObj.readyState != 4) WSH.Sleep(50);
    eval(xObj.responseText);
    j2lib = fso.CreateTextFile(temp + '\\json2.js', true);
    j2lib.Write(xObj.responseText);
    j2lib.Close();
}

WSH.Echo(JSON.stringify(JSON.parse(json), null, '\t'));

这是另一个使用相同语法的解决方案,不需要下载 json2.js。它通过以不可见方式启动 Internet Explorer、调用 IE 的内置 JSON 方法,然后再次静默关闭 IE 来避免这种情况。这很可能比上面的方法慢,并且可能会根据机器安全策略被阻止;但它确实具有无需互联网连接即可工作的优点。

@if (@CodeSection == @Batch) @then

@echo off & setlocal

cscript /nologo /e:JScript "%~f0"
goto :EOF

@end // end Batch / begin JScript hybrid chimera

var IE = WSH.CreateObject('InternetExplorer.Application'),
    json = WSH.StdIn.ReadAll();

IE.Visible = 0;
IE.Navigate('about:blank');
while (IE.Busy || IE.ReadyState != 4) WSH.Sleep(25);

var JSON = IE.document.parentWindow.JSON,
    pretty = JSON.stringify(JSON.parse(json), null, "\t");

WSH.Echo(pretty);

IE.Quit();
try { while (IE && IE.Busy) WSH.Sleep(25); }
catch(e) {}

这是另一种解决方案,这次使用的是批处理/HTA 混合解决方案。有一个<meta>标签强制 HTA 解释器兼容 IE9,从而包括 支持 JSON 方法。这比 IE 方法更快,但并不是完全不可见。 HTA 窗口在屏幕上闪烁一瞬间,然后自行关闭。

<!-- : batch portion

@echo off & setlocal

rem // The for /f loop forces mshta to communicate with stdout
rem // as a console script host.  Without for /f, attempting
rem // to write to stdout results in an invalid handle error.
for /f "delims=" %%I in ('mshta.exe "%~f0"') do echo(%%I
goto :EOF

end batch / begin HTA : -->

<meta http-equiv="x-ua-compatible" content="IE=9" />
<script>
var fso = new ActiveXObject('Scripting.FileSystemObject'),
    stdin = fso.GetStandardStream(0),
    stdout = fso.GetStandardStream(1),
    json = stdin.ReadAll(),
    pretty = JSON.stringify(JSON.parse(json), null, '\t');

close(stdout.Write(pretty));
</script>

我认为最好的解决方案是使用文献记载不足 htmlfileCOM 对象。使用相同的技巧<meta>标签以强制其与 IE9 兼容,如上面的 HTA 解决方案所示,htmlfileCOM 对象为 JSON 方法提供本机支持,无需下载库,也无需分叉额外的窗口帮助程序应用程序。它只是加载一个dll。

@if (@CodeSection == @Batch) @then

@echo off & setlocal

cscript /nologo /e:JScript "%~f0"
goto :EOF

@end // end batch / begin JScript hybrid chimera

var htmlfile = WSH.CreateObject('htmlfile'),
    json = WSH.StdIn.ReadAll();

htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');

var JSON = htmlfile.parentWindow.JSON,
    pretty = JSON.stringify(JSON.parse(json), null, '\t');

htmlfile.close(WSH.Echo(pretty));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在写入文件之前美化 JSON 的 cURL 下载 的相关文章

  • Mysql - 如何比较两个 Json 对象?

    将整个 MySql json 列与 json 对象进行比较的语法是什么 以下不起作用 select count criteria from my alerts where criteria industries 1 locations 1
  • $.parseJSON() 在有效对象上返回 null

    jsfiddle 链接 http jsfiddle net YmUmp 1 var x Item1 1 Item2 Item3 3 alert JSON stringify x undefined 2 alert parseJSON x 第
  • 处理 Json.NET 中的字节顺序标记 (BOM) 字符

    对于 NET Core 项目 我使用返回 JSON 格式的数据的公共 API 然而 他们的一些 不是全部 响应在字符串开头有一个 BOM 字符 这会导致 Visual Studio 和 Json NET 无法将该字符串识别为有效的 JSON
  • 带有客户端证书身份验证的curl

    我们喜欢使用客户端证书身份验证而不是基本身份验证来访问网络服务器 证书是 PEM 证书 密钥文件是单独的文件 卷曲调用如下所示 curl v cert cert crt key key key pass foobar https tests
  • 将新行 JSON 上传到 Elasticsearch 批量 API

    我正在尝试使用 Bulk API 将新行 JSON 上传到 Elasticsearch 我上传的批量 JSON 如下所示 每个 JSON 都占一个新行 ip x x x x seen true classification maliciou
  • 只返回 $.ajax 传递的 JSON 数据的前 20 个结果?

    我有以下简单的 jquery 片段 document ready function ajax url myjson json dataType json success function json each json function al
  • Windows 卷曲批处理文件

    我想使用 Windows 批处理文件进行 mailgun 卷曲调用 由于Windows shell不支持多行 如何在Windows批处理文件中执行以下curl函数 curl s user api key xxxxxxxxxx https a
  • jquery getJSON 跨域问题

    使用 JQuerys getJSON 从另一个域拉入 JSON 文件时 我似乎无法使该文件正常工作 我已经将回调部分放在了 url 的末尾 但仍然没有任何乐趣 Firebug 告诉我这是一个跨域问题 这似乎是有道理的 就好像我将 json
  • 批处理文件和脚本中的腻子?

    我有一个批处理文件 可以很好地打开腻子 c putty exe 电子邮件受保护 cdn cgi l email protection pw boyhowdy 但为了让这项工作对我有用 我需要了解如何包含命令脚本 以便它可以在 putty 工
  • Express + EJS - 将参数传递给 EJS 视图

    我对 Node js Express EJS 相当陌生 我最近注意到 当我将参数从 Express 请求处理程序传递到 EJS 视图并省略参数名称时 它会根据变量名称创建一个名称 例如 在下面的代码中 server js var expre
  • 如何处理 Volley StringRequest 中的空值

    我有一个返回 2 组不同值的响应 在每种情况下 都会有一个值always为空 另一个将为空always包含一个值 问题是 Volley 不允许我分配 null JSON 值或在 if 语句中检查 JSON 值 它只是指 catch 块 我正
  • 如何对 SwiftyJSON JSON 对象进行子集化

    我正在构建一个 iOS 应用程序 其中我的一个 API 调用返回一个大型 JSON blob 我使用 SwiftyJSON 将其加载到 JSON 对象中 例如 它看起来像这样 data name object name id 1 descr
  • Gridstack.js 从 JSON 获取位置

    我现在正在与Gridstack js https github com troolee gridstack js这对我有好处 但是 总是有一个但是 有人知道我如何定位 JSON 数组中定义的 grid stack item 吗 HTML 示
  • 使用递归 CTE 生成嵌套第 n 层 JSON SQL Server

    我有以下结构的数据 我想使用父属性 id 关系生成嵌套 JSON 所需的输出 propertyID 1 title foo class typeid 150 value bar children propertyID 2 title foo
  • 从队列 ID 获取 Jenkins 作业构建 ID

    我成功地使用它来启动 Jenkins 作业 curl X POST http jenkins srv 8080 job MY JOB buildwithParameters this 1 that 2 user name pass 我还可以
  • cURL 错误 28:5001 毫秒后解析超时

    我使用 WordPress 最近将我的网站从 cpanel 主机移动到带有 directadmin 面板的 Linux 服务器 转账后立即发现客户在通过EDD插件下载时出现以下错误 cURL 错误 28 5001 毫秒后解析超时 我也遇到了
  • 使用 Django 和 Python 创建 JSON 响应

    我正在尝试将服务器端 Ajax 响应脚本转换为 Django HttpResponse 但显然它不起作用 这是服务器端脚本 RECEIVE VALUE validateValue POST validateValue validateId
  • 使用 JSON 将数据从 Python 导出到 Tableau?

    如何以表格形式从 Python 获取 400 万行和 28 列 我假设 基于搜索 我应该使用 JSON 格式 这种格式可以处理大量数据并且足够快 我制作了 12 行数据的子集并尝试使其正常工作 好消息是 它正在发挥作用 坏消息 不是我想要的
  • 如何在Tensorflow中读取json文件?

    我正在尝试编写一个函数 用于读取张量流中的 json 文件 json 文件具有以下结构 bounding box y 98 5 x 94 0 height 197 width 188 rotation yaw 27 970195770263
  • Node.js -Firebase 服务帐户私钥无法解析

    I use env我的 app js 文件中的变量用于访问密钥 一切都工作正常 直到我下载了一个新的Firebase Service Account Private Key 当我用新值替换旧值时 我无法再访问该密钥 因为terminal当我

随机推荐

  • 如何在 apache 服务器上运行 socket.io(仅限客户端)

    我想在我的 apache 服务器上运行 socket io 的客户端 我已将 socket io 目录上传到我的网络服务器 并尝试了主站点的简单客户端连接示例套接字 io但它不起作用 我不知道需要什么才能让它工作并连接我正在运行的服务器 我
  • 将参数传递给返回集合的 OData (GET) 方法

    我在用OData v3 如何将参数传递给OData控制器并返回一个集合 我正在尝试做的示例 EnableQuery AllowedQueryOptions AllowedQueryOptions All public IQueryable
  • Firestore Cloud Function 空集合

    我有一个问题困扰了我好几天 我正在尝试创建一个从 Firestore 数据库读取的 Firebase Cloud 函数 我的 Firestore 数据库如下所示 问题是我无法列出users像这样 db collection users ge
  • Azure DevOps管道:取消队列中的多个待处理作业

    在 Azure DevOps 管道中 如何取消作业池的所有待处理作业 我有很多工作在排队 但看不到在哪里可以取消我正在等待的所有工作 Azure Devops 尚不具备从 UI 部分批量取消所有待处理作业的功能 您可以编写脚本来调用rest
  • 我可以有一个空的 Java 类吗?

    我正在创建一个基于网格的游戏 我需要实现一组在网格内占据随机位置的障碍物 我创建了一个抽象类ALifeForm 它保存网格中每个项目的通用方法 显然 抽象类无法初始化 所以我要创建一个新类AObstacle 这将延长ALifeForm 唯一
  • 模板实例化检查类中存在的成员

    我有一组类 其中有一个或多个类型为memberA memberB memberC 的成员 并非所有班级都有所有成员 我想创建一个模板来设置成员 例如 template
  • Getresponse API 2(使用 PHP 添加自定义字段和联系人)

    我对编码和 Web 开发还很陌生 而深入研究 API 是我希望自己从未做过的事情 然而话虽这么说 我的进步比预期的要远 我现在在尝试将自定义字段添加到添加联系人功能时遇到问题 我试图获取代码以在用户点击我的感谢页面时添加隐藏的表单输入字段
  • 为什么我无法在 Mac OS Sierra 上安装 Sass?

    我已经尝试在 Mac OS Sierra 10 12 上从终端输入以下代码安装 Sass 3 次 sudo gem install sass 然后它要求我输入密码 我输入密码 但没有任何反应 我什至等了半个小时 它甚至没有给出任何错误或任何
  • 使用目标文件名变量重命名文件时出现“错误文件名或编号”

    我正在尝试循环一个充满 html 文件的文件夹 并在文件的开头添加一些代码 尽管我在插入的代码之前遇到了一些不需要的换行符 并且还获取了
  • svg / d3.js 矩形一侧的圆角

    我知道 svg 有一个内置函数可以做圆角 但我只需要在四个角中的 2 个上做圆角 我知道我可以在彼此之上绘制多个矩形来模仿这一点 但这看起来有点俗气 有什么方法可以使用剪辑或任何 d3 js 方法来做到这一点吗 现在我有一个水平条形图 其中
  • Python Dataframe 向列添加描述

    我想向列添加描述 例如我收集数据的数据源 这样的事可能吗 大约8年前有人问过类似的问题将我自己的描述属性添加到 Pandas DataFrame没有答案 My code df index colA colB description from
  • 创建会话时添加另一个 cookie [重复]

    这个问题在这里已经有答案了 在我用struts 2 javax servlet v 2 5和嵌入式tomcat lib 开发的Web应用程序中 当创建HttpSession时 第一次调用request getSession 我总是在第一个请
  • 如何将宽度 100% 应用于可滚动的表格主体

    我正在尝试实现表体可滚动 我能够成功做到这一点 但现在我面临宽度 100 的问题 请检查这个jsfiddlehttps jsfiddle net Ratan Paul stpgd6x6 table thead style display b
  • JavaScript 匹配任何字母字符

    在 PHP 中 我可以使用这个正则表达式来匹配字符串中的任何字母字符 preg match pL int 1 然而在 JavaScript 中这是不可用的 pL test false 我猜这是由于不同的正则表达式解释器造成的 并且在某些浏览
  • 使用 Spring Data neo4j 创建空间索引时出错

    我正在研究 Neo4j Spring Data 项目 想要在节点上执行一些与空间相关的操作 实体类 NodeEntity public class User GraphId Long id private String fname priv
  • 在 Android 中通知您发送的消息是否发送成功

    我这里有一些代码来发送消息 SmsManager sms new SmsManager getDefault sms sendTextMessage 911 null HALP PendingIntent null Developer an
  • Codeigniter - 使用 edit_unique 编辑表单(重新填充)

    看来edit unique函数 它被描述为here 更新记录时验证 CodeIgniter 中的唯一性 杀死set value功能 一切正常 就像这样 echo form input username set value username
  • 需要常量表达式吗? (Java switch 语句)

    我不知道是什么导致了这个错误 我和老师仔细检查了一遍 也没有发现问题所在 import java util Scanner public class MailAssignment public static void main String
  • spring MVC 多文件上传

    我正在使用 Spring MVC 和 JSP 我想上传 2 个文件 但问题是只上传了一个文件 下面是代码
  • 在写入文件之前美化 JSON 的 cURL 下载

    我正在使用 cURL 7 39 0 调用 REST Web 服务并将响应写入 json file curl L X POST b cookies txt H Content Type application json http localh