小编Pie*_*mol的帖子

如何在 JSONPath 表达式中使用 @odata.count 属性?

使用来自 OData v4 API 响应的以下 JSON 对象:

{

   "@odata.context": "https://api.asdfasdf.com/",
   "@odata.count": 2,
   "value": [
        {
            "id": 123456789,
            "name": "Random name"
        },
        {
            "id": 15345,
            "name": "Random name2"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这适用于选择数组中的对象: $.value[?(@.id == 123456789)]

使用这个 JSONPath 我可以获得属性“@odata.count”的值: $.['@odata.count']

但是如何使用“@odata.count”用表达式编写 JSONPath 呢?例如。仅当计数大于 1 时才选择,这些表达式失败:

$.[('@odata.count' > 1)]
$.[?('@odata.count' > 1)]
$.[(@.['@odata.count'] > 1)]
... and a lot of other expressions
Run Code Online (Sandbox Code Playgroud)

我坚信我正在研究与我想象的不同深度的 json,并且属性的命名约定(以及选择它的方式)让我发疯。

最终目标是在 SoapUI 测试套件断言中使用表达式。

将响应中的“@odata.count”属性与我们的测试数据进行比较。

编辑: 感谢评论者,通过删除数字后的引号来修复 json。

以及帮助我​​找到解决方案的表达式的其他发现:

这些表达式的结果是“2”:

$['@odata.count']
$..[0]['@odata.count']
Run Code Online (Sandbox Code Playgroud)

此表达式产生一个空数组:

$..[?(@['@odata.count'] > 1)]
Run Code Online (Sandbox Code Playgroud)

此表达式的结果为“null”:

?($['@odata.count'] > 1) …
Run Code Online (Sandbox Code Playgroud)

json soapui jsonpath odata

5
推荐指数
1
解决办法
1055
查看次数

为什么在转换为字符串时小数点中的点被逗号替换?

在 PHP 中,我发现当小数点被打印到屏幕上时(或者:当它被转换为字符串时),小数点分隔符也将被转换为逗号。但这是为什么呢?我还没有找到任何关于此的文档,我认为转换为字符串不会考虑国际化设置。

示例代码:

$var = 12.345;

var_dump($var); // Outputs: double(12.345)
var_dump((string)$var); // Outputs: string(6) "12,345"
var_dump(str_replace(',', '.', $var)); // Outputs: string(6) "12.345"
echo $var; // Outputs: 12,345
Run Code Online (Sandbox Code Playgroud)

是什么导致了这种行为?


这个问题适用于 PHP < 8。根据文档

自 PHP 8.0.0 起,小数点字符始终为.. 在 PHP 8.0.0 之前,小数点字符在脚本的语言环境(类别 LC_NUMERIC)中定义。请参阅 setlocale() 函数。

string casting decimal php-7

0
推荐指数
1
解决办法
2045
查看次数

标签 统计

casting ×1

decimal ×1

json ×1

jsonpath ×1

odata ×1

php-7 ×1

soapui ×1

string ×1