如何构建动态 JSON 对象全部,
我想知道如何在 JSL 中构建动态 JSON 对象?
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( "\[{"username":"bob","address":"12345"}]\" )
);使用脚本索引中的示例,如果我想将用户名从 bob 更改为 mark 和地址从 12345 到 12346 并且我有 10 个这样的调用,我更愿意将其构建为外部动态对象。 我最初尝试将其构建为关联数组,然后使用 As JSON Expr() ,但是,这会导致错误。 我在那种情况下的做法是:
MyAA = Associative Array();
MyAA["username"] = "bob" ;
MyAA["address"] = "12345" ;<BR /><BR />request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( As Json Expr(MyAA))
);
当然,这个例子不会发生这种情况,但我试图调用的 api 会发生这种情况。 但是,当我将硬编码的 JSON 作为输入传递时,api 调用会按预期工作。

任何帮助表示赞赏。
回复:如何构建动态 JSON 对象那是为了逐步构建它,完整的“硬编码”版本只是
每月因素 = { {
[“月”=> 1,“month_name”=>“一月”,“反照率”=> 0.2,“soiling_loss”=> 2.0],
[“月”=> 2,“month_name”=>“二月”,“反照率”=> 0.2,“soiling_loss”=> 2.0],
[“月”=> 3,“month_name”=>“三月”,“反照率”=> 0.2,“soiling_loss”=> 2.0]
}};
je = As JSON Expr(monthlyFactors);
显示(je);
根据经验:
* JSON 数组映射到 JSL 列表(不是矩阵或向量,注意 '[]' 相似性);
* JSON 字典映射到 JSL 关联数组;
* 检查非评估变量引用;
* 检查数据结构修改调用是否真的改变了目标对象(而不是返回修改后的副本)。
回复:如何构建动态 JSON 对象并且不要忘记您可以通过连接 JSON 格式的字符串来创建 JSON。
不需要列表或关联数组。
回复:如何构建动态 JSON 对象如果我使用 JSON 编辑器中的 chrome add 重写它,我会看到一个关联数组列表
[
{
"month": 1,
"month_name": "Jan",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 2,
"month_name": "Feb",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 3,
"month_name": "Mar",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 4,
"month_name": "Apr",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 5,
"month_name": "May",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 6,
"month_name": "Jun",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 7,
"month_name": "Jul",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 8,
"month_name": "Aug",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 9,
"month_name": "Sep",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 10,
"month_name": "Oct",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 11,
"month_name": "Nov",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 12,
"month_name": "Dec",
"albedo": 0.2,
"soiling_loss": 2
}
]

回复:如何构建动态 JSON 对象这似乎有效。
内部列表 = {};
InsertInto(innerList, [ "month" => 1, "month_name" => "Jan", "albedo" => 0.2, "soiling_loss" => 2.0]);
InsertInto(innerList, [ "month" => 2, "month_name" => "Feb", "albedo" => 0.2, "soiling_loss" => 2.0]);
InsertInto(innerList, [ "month" => 3, "month_name" => "Mar", "albedo" => 0.2, "soiling_loss" => 2.0]);
monthlyFactors = {innerList};
je = As JSON Expr(EvalList(monthlyFactors));
显示(je);
我认为真正的问题是了解对 JSL 列表和关联数组数据结构的正确 API 调用,以及它们在评估变量、返回副本与实时引用等方面的行为。 它们被用于构建 JSON 对象这一事实是偶然的。
话虽如此,随着 JMP 对 REST API 的新支持,我同意与更详细的端到端示例进行会话会有所帮助。 我将把这个建议单独传递给我们的文档团队。 感谢您的建议!
回复:如何构建动态 JSON 对象啊。
我在从图片到文本的过程中遇到了转录错误。
回复:如何构建动态 JSON 对象你有 API 的链接吗? 我认为您没有列出有效的 JSON。
至少 Chrome 中的 JSON 编辑器不这么认为。
谢谢回复:如何构建动态 JSON 对象@nascif_jmp和@bryan_boone ,
谢谢你的回复。 您的回答帮助我取得了进展,但是我有几个问题:
1. 你能提供一个 JSL 中可接受的 JSON 数组格式的例子吗? 这被接受了吗?

2. 脚本索引或脚本指南是否涵盖了 JSON 数组的部分或如何定义一个空的 JSON 对象,如 nasicf 所显示的那样?
A。 如果是的话,我想读一下
b. 如果没有,我会要求将其添加到文档中,因为我无法在任何地方找到它
回复:如何构建动态 JSON 对象列表 ("[]") 的 JavaScript/Python 语法在 JSL 中的含义不同。 在 JSL 中,'[]' 表示空矩阵,它没有有效的 JSON 表示,这就是为什么你得到 '?'结果中的运算符。 那 '?'操作员反过来必须是导致您作为服务响应收到的远程错误消息的原因。
您应该改用“{}”来指示空列表,或使用“[=>]”来指示空关联数组/字典。
捕获中间结果并使用 show() 检查它们以测试您的假设始终是一个好习惯。
http://wiki.c2.com/?MakeItWorkMakeItRightMakeItFast
回复:如何构建动态 JSON 对象您可以构建“动态”JSON,但您必须在创建子元素后将它们添加到关联数组。
这就是 JSL 的工作方式。
这说明了我的意思:
aa = [=>];
list = {};
aa["a jsl list"] = list;
Insert Into(list, "Hello World");
Insert Into(list, 2019);
show(list);
show(aa);
输出:
list = {"Hello World", 2019};
aa = ["a jsl list" => {}];
虽然这样:
aa = [=>];
list = {};
Insert Into(list, "Hello World");
Insert Into(list, 2019);
aa["a jsl list"] = list;
show(list);
show(aa);
输出:
list = {"Hello World", 2019};
aa = ["a jsl list" => {"Hello World", 2019}];
回复:如何构建动态 JSON 对象我根本没有关注这个线程,但看到提到了关联数组的使用以及对默认结果的混淆。 这是我要答复的唯一方面。
看帮助>图书>脚本指南并在目录中搜索关联数组:
默认值
默认值确定关联数组中不存在的键的值。 如果你
尝试访问关联数组中不存在的键,将导致错误。 如果你定义一个
关联数组的默认值,访问不存在的键会导致
下列的:
• 将键添加到关联数组
• 将默认值分配给新键
• 返回新键的(默认)值而不是错误
如果你从一个字符串列表构造一个关联数组而不给键赋值,
然后为键分配值 1。 关联数组的默认值设置为 0。
要设置默认值:
cary = Associative Array();
cary << Set Default Value( "Cary, NC" );<BR />
要确定是否为关联数组设置了默认值,请使用 <
默认值消息。
cary << Get Default Value;
"Cary, NC"
如果没有默认值,则返回 Empty()。
除了 Set Default Value 消息外,还可以在文字构造函数中设置默认值
使用 => 没有键的值。
counts = ["a" => 10,
"b" => 3,
=> 0]; // default value of 0
counts["c"] += 1;
Show( counts );
counts = ["a" => 10, "b" => 3, "c" => 1, => 0];
在第一行中,默认值设置为 0。 在第二行中,键“c”不存在于
计数。 在输出中,使用默认值 0 创建键“c”,然后递增
1.
注意:如果一个键的值是默认值,那么该键将被删除,因为任何键都会返回
默认值。
回复:如何构建动态 JSON 对象@马克贝利,
当我使用 "[ ]" 时,会导致错误。
回复:如何构建动态 JSON 对象您可以定义在引用关联数组中一对没有值的键时要返回的任何结果。
回复:如何构建动态 JSON 对象我能否首先建议您不要只复制图片,而是使用 JSL 代码功能,以便人们可以复制和粘贴您的代码?
我假设您正在尝试为用户名提供向量?
我仍然没有让它与 httpbin 崩溃,尽管它仍在做奇怪的操作员事情。如果我使用列表而不是矩阵,尽管它似乎可以满足我的要求。
Names default to here(1);
MyAA = Associative Array();
MyAA["username"] = {1, 2, 3};
MyAA["address"] = "12345";
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( AsJSONExpr(myAA) )
);
data = request << Send;
这有帮助吗?
回复:如何构建动态 JSON 对象@vince_faller ,
所以问题源于此:

如果关联数组有一个没有值的键,那么在使用 As JSON Expr() 时,它会被转换为这个奇怪的运算符(?),这不是可以正确解析的东西,这反过来会引发错误。 在我的例子中,我只是从我的关联数组中删除了键并且它起作用了,但是我很想知道传递这样一个参数的正确方法是什么?
回复:如何构建动态 JSON 对象@vince_faller ,
由于有些参数我不能在这里分享,所以我把它作为私人消息发送给你。 您将从消息中看到,硬编码示例和 As JSON Expr() 具有相同的参数,值是动态的,但它会导致错误,如我之前所示。
回复:如何构建动态 JSON 对象您是否确认您的 AS JSON Expr() 与您的硬编码相同?
构建 JSON 对象似乎有效。
Names default to here(1);
MyAA = Associative Array();
MyAA["username"] = "bob" ;
MyAA["address"] = "12345" ;
myAA["aa"] = associative array();
myAA["aa"]["thing1"] = 14;
myAA["aa"]["thing2"] = 28;
show( As JSON Expr(myAA));