2013-05-10 50 views
0

我用這個方法來產生一通一通:
如何產生2個不同json_encodes

 public function setJSON($JSON) { 
    if(json_decode($JSON) !== false) { 
     $this->JSON = $JSON; 
     return true; 
    } 
    $this->sError = 'This is not a JSON string.'; 
    return false; 
    } 
我把這種方法生成的通:
$pass->setJSON('{ 
    "passTypeIdentifier": "'.$passTypeID.'", 
    "formatVersion": 1, 
    .............. 
"barcode": { 
     "altText" : "'.$alt.'", 
     "format" : "PKBarcodeFormatPDF417", 
     "message": "Member-Card", 
     "messageEncoding": "iso-8859-1", 
     "changeMessage" : "This pass now has altText %@ !" 
     }, 
"locations" : [ 
    { 
     "longitude" : 104.89529371261597, 
     "latitude" : 11.576150037278605, 
     "relevantText": "CamMob (dis. 1%)" 
    }, 
    ..................... 
] 
    }'); 
但現在我不寫靜態的位置,我也得到那些來自數據庫的數據通過:
$query5 = mysql_query("select * from company"); 
    while ($row5 = mysql_fetch_array($query5)){ 
     $companyName = $row5['relevantTextName']; 
     $discount = $row5['relevantTextDiscount']; 
     $long = $row5['longitute']; 
     $lat = $row5['latitute']; 
     $link = $row5['link'];

$location['locations'][] = array("longitute" => $long, "latitute" => $lat, "relevantText" => $companyName." (" . $discount. "%)"); } $jsonString = json_encode($location) ; error_log("Locations: ".$jsonString,0); $pass->setJSON($jsonString); $pass->setJSON('{ "passTypeIdentifier": "'.$passTypeID.'", "barcode": { "altText" : "'.$alt.'", "format" : "PKBarcodeFormatPDF417", "message": "Member-Card", "messageEncoding": "iso-8859-1", "changeMessage" : "This pass now has altText %@ !" } }');</pre>

當我測試更新通行證時沒有錯誤,但我看不到以前像鎖定屏幕上的通行證。因此這意味着我尚未將這些位置包含在通行證中。我應該改變什麼?它是setJSON方法的問題嗎?如果我喜歡這樣,我怎麼能把這兩個jsons結合在一起?

+0

多少地方,你呢?請記住,只有前10個會顯示。另外,如果您想驗證位置是否被添加到JSON中,您可以將.pkpass文件的擴展名更改爲.zip以查看您的代碼正在生成的內容,或者將JSON寫入php日誌。 – PassKit 2013-05-10 01:40:22

+0

如果我從數據庫中選擇位置,如何通過編碼將它們添加到已創建的通道中? – malinchhan 2013-05-10 01:58:11

+0

我不知道如何結合不同的encode_json! – malinchhan 2013-05-10 02:04:58

回答

1

不是直接構建JSON,而是先構造一個數組,然後將其轉換爲JSON。

$pass_data = array("passTypeIdentifier" => $passTypeID, 
        "formatVersion" => 1, 
        "barcode" => array (
             "altText" => $alt, 
             "format" => "PKBarcodeFormatPDF417", 
             "message" => "Member-Card", 
             "messageEncoding" => "utf-8", // use UTF8 in case you want to encode Khmer or other non ASCII 
             "changeMessage" => "This pass now has altText %@ !" 
            ), 
        "locations" => $locationsArray, 
        "organizationName" => "Digi club card", 
        "description" => "Membership card", 
        "logoText" => "Digiclub", 
        "foregroundColor" => "rgb(0,0,0)", 
        "backgroundColor" => "rgb(211,211,211)", 
        "generic" => array (
          "headerFields" => array(
             array ("key" => "Status", 
               "label" => " ", 
               "value" => "Membership card" 
              ), 
             ), 
          "primaryFields" => array(
             array ("key" => "Name", 
               "value" => $memberName, 
              ), 
             ), 

          "secondaryFields" => array(
             // Secondary Field data 
             ), 

          "auxiliaryFields" => array(
             // Auxiliary Field data 
             ), 

          "backFields" => array(
             // Backfiels Field data 
             ), 
          ) 
        ); 

則數組轉換成JSON:

$pass->setJSON(json_encode($pass_data)); 
+0

謝謝,我只是這樣測試但我並不是全部寫入數組,而是使用解碼,但我也遇到了一些錯誤! – malinchhan 2013-05-10 03:57:36

+0

$ data ='{\t \t「passTypeIdentifier」:「'。$ passTypeID。'」, ..........}'; – malinchhan 2013-05-10 03:58:13

+0

$ dataArray = json_decode($ data,true); \t $ result = array_merge($ dataArray,$ location); $ String = json_encode($ result); \t \t error_log(「All data:」。$ String,0); – malinchhan 2013-05-10 03:58:32

相關問題