2015-06-18 23 views
0

我有這樣的JSON響應: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表達式來驗證此節點是否具有此表單上的實際內容?

回答

0

有沒有這樣的事情作爲JSON表達式。這是一種數據格式,而不是編程語言。如果你想測試任何有關它的信息,你必須先選擇一種編程語言。

的基本步驟是任何語言相同的:

  1. 解析JSON
  2. 查找與DETAIL_TYPE的對象,你想
  3. 檢查你所關心的屬性就可以了
  4. 定義

下面是你將如何在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將會有一個。如果其中任何一個假設都是錯誤的,您需要進行額外的測試。