如何获得JSON值?

时间:2013-08-16 06:38:26

标签: php json

大家好我想问一下如何使用循环获取JSON的值?我已经做了一些研究,但我的代码不起作用。我不知道我的错误是什么。我想要的是获取所有json值并将其放在表中。顺便说一句,我使用的是codeigniter

我的模特:

public function getAllPurchaseOrder(){

        $array = array();
        $sqlSelectAll = "select * from po_order
                         inner join po_supplier on po_order.poid = po_supplier.poid
                         inner join po_account_details on po_supplier.poid = po_account_details.poid";
        $resultSelectAll = $this->db->query($sqlSelectAll);
        foreach($resultSelectAll->result_array() as $details){
            $array[] = $details;
        }
        return "{\"data\":" .json_encode($array). "}";

}

我的控制器:

  public function index(){

        $data['title'] = "Welcome";
        $data['copyright'] = date('Y');
        $data['purchased_comment'] = $this->po_model->fetch_purchased_refid(); 
        $data['link'] = "PO";
        $data['itemlist'] = $this->po_model->getAllPurchaseOrder();            
        $this->load->view('common/header_common',$data);
        $this->load->view('common/navigation');
        $this->load->view('Purchase Order/contents/index',$data);
        $this->load->view('common/footer_common',$data);

    }

这是我的代码:

echo "<pre>";
var_dump(json_decode($itemlist,true));

我的json输出使用var_dump(json_encode)

  array(1) {
  ["data"]=>
  array(1) {
    [0]=>
    array(25) {
      ["poid"]=>
      string(1) "1"
      ["itemid"]=>
      string(1) "3"
      ["item_desc"]=>
      string(6) "Drinks"
      ["item_qty"]=>
      string(1) "4"
      ["item_price"]=>
      string(4) "5.00"
      ["total_amount"]=>
      string(5) "20.00"
      ["cash_on_delivery"]=>
      string(1) "Y"
      ["is_check"]=>
      string(1) "Y"
      ["bank_transfer"]=>
      string(1) "N"
      ["transaction_date"]=>
      string(19) "2013-08-15 15:44:30"
      ["posupid"]=>
      string(1) "1"
      ["spid"]=>
      string(1) "2"
      ["spname"]=>
      string(12) "MILO COMPANY"
      ["spaddress"]=>
      string(6) "Manila"
      ["contact_person"]=>
      string(4) "None"
      ["tin"]=>
      string(12) "1232-456-789"
      ["contact_number"]=>
      string(7) "0912151"
      ["poaccid"]=>
      string(1) "1"
      ["payee_name"]=>
      string(6) "Larren"
      ["bank_details"]=>
      string(11) "BDO Account"
      ["account_name"]=>
      string(7) "Premium"
      ["account_number"]=>
      string(5) "54564"
      ["prepared"]=>
      string(5) "Admin"
      ["checked"]=>
      string(5) "Admin"
      ["approved"]=>
      string(5) "Admin"
    }
  }

我的问题是我无法获得json的值。 比方说,我想要 poid 的值,但我不知道如何。我试过一些阵列但不会工作

这是我的代码:

$items = json_decode($itemlist,true);
echo $items['poid'];

4 个答案:

答案 0 :(得分:1)

怎么样?

echo $items['data'][0]['poid']

编辑:循环项目

$data = $items['data'];    
foreach($data as $item){
    echo 'poid: '.$item['poid'];
}

答案 1 :(得分:1)

使用此代码:

$arr = json_decode($itemlist,true);
echo $arr['data'][0]['poid'];

答案 2 :(得分:1)

以前的答案只会获得第一个元素的值,我假设你想循环遍历查询产生的所有元素。

首先,您可以将模型功能简化为:

public function getAllPurchaseOrder(){
        $sqlSelectAll = "select * from po_order
                         inner join po_supplier on po_order.poid = po_supplier.poid
                         inner join po_account_details on po_supplier.poid = po_account_details.poid";
        $resultSelectAll = $this->db->query($sqlSelectAll);
        return json_encode($resultSelectAll->result_array());
}

现在要遍历视图中的数据,您应该熟悉foreach循环遍历数组中的所有元素。

$items = json_decode($itemlist,true); //passing true decodes into associative array

foreach($items as $item){
    echo 'poid: '.$item['poid'];
}

true传递给json_decode()会返回转换为数组的所有对象,如果您想使用对象,只需使用->来访问对象属性,例如: $item->poid

答案 3 :(得分:0)

解码后的JSON字符串将转换为Javascript对象,您可以使用点表示法或字典来横跨其属性。

例如,如果您的JSON字符串类似于:

var myJSONString = "{'data':['a', 'b', 'c'] }";
var obj = JSON.parse(myJSONString);

您可以使用

检索“a”,“b”或“c”的值
var a  = obj.data[0];

var a = obj['data'][0];

如果obj.data不是字符串数组而是其他对象,则可以按照上述表示法检索嵌套值。

e.g。

var myJSONString = "{'data':['a':[2,4,6], 'b':[1,3,5], 'c':[1,2,3,5,8]] }";
var obj = JSON.parse(myJSONString);

var firstOfA = obj['data']['a'][0];

var firstOfA= obj.data.a[0];