【问题标题】:JSON verify that some node ha a valueJSON 验证某个节点是否有值
【发布时间】:2015-06-18 13:16:40
【问题描述】:

我有这个 JSON 响应:

{"modelpageStartData":{"WERKS":"2371","NAME1":"GAYLORD STORE","MATNR":"5405873","BISMT":"","EAN11":"","MAKTX":"LØPESKO ADIDAS","MEINS":"","BSTME":""},"modeltabReturnData":[],"modeltabArticleData":[{"DETAIL_TYPE":"MATNR","DETAIL_LABEL":"Varenummer i SAP","DETAIL_VALUE":"5405873","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"EAN","DETAIL_LABEL":"GTIN","DETAIL_VALUE":"4051936459253","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"SUPPLIER","DETAIL_LABEL":"Leverandør","DETAIL_VALUE":"G63942","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"SORTIMENT","DETAIL_LABEL":"Sortiment","DETAIL_VALUE":"P","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"ORIGINAL_PRICE","DETAIL_LABEL":"Ordinær pris","DETAIL_VALUE":"799.00 NOK","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"BSTME","DETAIL_LABEL":"Bestillingsenhet","DETAIL_VALUE":"","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"UNITS","DETAIL_LABEL":"","DETAIL_VALUE":"","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"MATNR","DETAIL_LABEL":"Varenummer i SAP","DETAIL_VALUE":"5405873","DETAIL_FILTER":"2"},{"DETAIL_TYPE":"LAST_ORDER","DETAIL_LABEL":"Siste bestilling","DETAIL_VALUE":"00.00.0000","DETAIL_FILTER":"2"},{"DETAIL_TYPE":"MENGE","DETAIL_LABEL":"Antall på vei inn","DETAIL_VALUE":"0.000 ","DETAIL_FILTER":"2"},{"DETAIL_TYPE":"LAST_COUNT","DETAIL_LABEL":"Siste lagertelling","DETAIL_VALUE":"00.00.0000","DETAIL_FILTER":"2"}]}

我想确保 DETAIL_TYPE":"ORIGINAL_PRICE -> DETAIL_VALUE 实际上有一个值(现在是 799.00 NOK)。但是我是否编写了一个 JSON 表达式来验证此节点在此表单上是否具有实际内容?

【问题讨论】:

    标签: json extract jsonpath


    【解决方案1】:

    没有 JSON 表达式这样的东西。它是一种数据格式,而不是一种编程语言。如果你想测试任何关于它的东西,你必须从选择一种编程语言开始。

    任何语言的基本步骤都是一样的:

    1. 解析 JSON
    2. 找到具有您想要的 DETAIL_TYPE 的对象
    3. 检查您关心的属性是否已在其上定义

    这是你在 Perl 中的做法。

    #!/usr/bin/env perl
    use v5.16;
    use strict;
    use warnings;
    use JSON;
    
    my $json = q!{"modelpageStartData":{"WERKS":"2371","NAME1":"GAYLORD STORE","MATNR":"5405873","BISMT":"","EAN11":"","MAKTX":"LØPESKO ADIDAS","MEINS":"","BSTME":""},"modeltabReturnData":[],"modeltabArticleData":[{"DETAIL_TYPE":"MATNR","DETAIL_LABEL":"Varenummer i SAP","DETAIL_VALUE":"5405873","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"EAN","DETAIL_LABEL":"GTIN","DETAIL_VALUE":"4051936459253","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"SUPPLIER","DETAIL_LABEL":"Leverandør","DETAIL_VALUE":"G63942","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"SORTIMENT","DETAIL_LABEL":"Sortiment","DETAIL_VALUE":"P","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"ORIGINAL_PRICE","DETAIL_LABEL":"Ordinær pris","DETAIL_VALUE":"799.00 NOK","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"BSTME","DETAIL_LABEL":"Bestillingsenhet","DETAIL_VALUE":"","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"UNITS","DETAIL_LABEL":"","DETAIL_VALUE":"","DETAIL_FILTER":"1"},{"DETAIL_TYPE":"MATNR","DETAIL_LABEL":"Varenummer i SAP","DETAIL_VALUE":"5405873","DETAIL_FILTER":"2"},{"DETAIL_TYPE":"LAST_ORDER","DETAIL_LABEL":"Siste bestilling","DETAIL_VALUE":"00.00.0000","DETAIL_FILTER":"2"},{"DETAIL_TYPE":"MENGE","DETAIL_LABEL":"Antall på vei inn","DETAIL_VALUE":"0.000 ","DETAIL_FILTER":"2"},{"DETAIL_TYPE":"LAST_COUNT","DETAIL_LABEL":"Siste lagertelling","DETAIL_VALUE":"00.00.0000","DETAIL_FILTER":"2"}]}!;
    
    
    
    # 1. Parse the JSON
    my $data = JSON::from_json($json);
    
    # 2. Find the object with the DETAIL_TYPE you want
    my ($original_price) = grep { $_->{DETAIL_TYPE} eq "ORIGINAL_PRICE" } @{$data->{modeltabArticleData}};
    
    # 3. Check that the property you care about is defined on it
    if (defined $original_price->{DETAIL_VALUE}) {
        say "Defined";
    } else {
        say "Not defined";
    }
    

    这假定每个 DETAIL_TYPE 都是唯一的,并且 ORIGINAL_PRICE 会有一个。如果其中任何一个假设不成立,您就需要进行额外的测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 2019-09-24
      • 2012-10-02
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多