在php中将字符串转换为json

时间:2014-06-05 08:24:34

标签: php arrays string json

是否可以读取这些字符串(从json格式转换为字符串)到php数组?

jQuery的:

  $.ajax({

            type: 'GET',
            url: 'index.php?task=search&wtd=ul',
            data: $('#fupdate').serialize()+'&derulo='+$('#getdbresult').val(),
            beforeSend: function(){
                $('.the-modal').html('Updating...');
            }, 
            success: function(d){
                $('.the-modal').html(d);
                console.log(d);
            }

    });

PHP:

var_dump(json_decode("{$_REQUEST['derulo']}", true));

值:

string(379)"[{\"target_detail_id\":\"66351031\",\"first_name\":\"Dorothy\",\"last_name\":\"Smith\",\"company\":\"Active Money Now\",\"sic_code\":\"\",\"position\":\"\",\"target\":\"1300572544\",\"website\":\"\",\"email\":\"dorothy@activemoney.com.au\",\"email_status\":\"\",\"country\":\"Australia\",\"city\":\"Broken Hill\",\"postal_code\":\"2880\",\"address\":\"Po Box 41\",\"note\":\"\"}]" 

结果:

NULL

我尝试使用json_decode但没有出现。 还考虑使用implode相应地分隔字符串。 但还有其他方法吗?

EDIT:

适用于:$object = (json_decode(stripslashes($_REQUEST['derulo'])));

2 个答案:

答案 0 :(得分:4)

您需要使用json_decode(" 解码JSON字符串")而不是json_encode(" 返回值的JSON表示")。

假设您的输入正确(并且您提供的示例是),则返回值将是表示 JSON数据的对象。您还可以将结果作为数组获取(请参阅参数参考文档)。


编辑:您的代码必须有其他问题,请发布您的完整代码 (我的猜测是你没有检查返回的值,但希望json_decode通过引用修改参数,只检查参数变量 - 这将解释为什么"没有任何反应")

以下作品:

Ideone snippet

PHP代码:

<?php

$json = <<<JSON
[{"target_detail_id":"66351031","first_name":"Dorothy","last_name":"Smith","company":"Active Money Now","sic_code":"","position":"","target":"1300572544","website":"","email":"dorothy@activemoney.com.au","email_status":"","country":"Australia","city":"Broken Hill","postal_code":"2880","address":"Po Box 41","note":""}]
JSON;

$object = json_decode($json);
$array = json_decode($json, true);

var_dump($object);
var_dump($array);

<强>输出:

array(1) {
  [0]=>
  object(stdClass)#1 (15) {
    ["target_detail_id"]=>
    string(8) "66351031"
    ["first_name"]=>
    string(7) "Dorothy"
    ["last_name"]=>
    string(5) "Smith"
    ["company"]=>
    string(16) "Active Money Now"
    ["sic_code"]=>
    string(0) ""
    ["position"]=>
    string(0) ""
    ["target"]=>
    string(10) "1300572544"
    ["website"]=>
    string(0) ""
    ["email"]=>
    string(26) "dorothy@activemoney.com.au"
    ["email_status"]=>
    string(0) ""
    ["country"]=>
    string(9) "Australia"
    ["city"]=>
    string(11) "Broken Hill"
    ["postal_code"]=>
    string(4) "2880"
    ["address"]=>
    string(9) "Po Box 41"
    ["note"]=>
    string(0) ""
  }
}
array(1) {
  [0]=>
  array(15) {
    ["target_detail_id"]=>
    string(8) "66351031"
    ["first_name"]=>
    string(7) "Dorothy"
    ["last_name"]=>
    string(5) "Smith"
    ["company"]=>
    string(16) "Active Money Now"
    ["sic_code"]=>
    string(0) ""
    ["position"]=>
    string(0) ""
    ["target"]=>
    string(10) "1300572544"
    ["website"]=>
    string(0) ""
    ["email"]=>
    string(26) "dorothy@activemoney.com.au"
    ["email_status"]=>
    string(0) ""
    ["country"]=>
    string(9) "Australia"
    ["city"]=>
    string(11) "Broken Hill"
    ["postal_code"]=>
    string(4) "2880"
    ["address"]=>
    string(9) "Po Box 41"
    ["note"]=>
    string(0) ""
  }
}

EDIT2:

  1. 您不需要围绕json_decode参数引用,只需使用

    json_decode($_REQUEST['derulo'], true);
    

    但这不是造成问题的原因(它只是效率低下,php必须解析字符串中的另一个变量)。

  2. 您的php代码段有效,因此您必须从查询中获取错误的数据。您可以使用

    轻松检查
    var_dump($_REQUEST['derulo']);
    

    使用data请求或切换到POST时,您不应该混合在网址和GET上发送数据。我建议让jQuery处理数据的序列化,例如

    $.ajax({
        type: 'GET',
        url: 'index.php',
        data: {
          'task':'search',
          'wtd':'ul',
          'derulo':JSON.stringify($('#getdbresult').val())
        },
        beforeSend: function(){
            $('.the-modal').html('Updating...');
        }, 
        success: function(d){
            $('.the-modal').html(d);
            console.log(d);
        }
      });
    

答案 1 :(得分:0)

您附加到问题的代码已经格式化为json。所以你需要使用json_decode函数解码它。它返回一个对象,只是将它强制转换为数组。 请注意,json代码本身就是一个数组(一切都在方括号内),所以我们必须引用第一个项目($ item [0])。

$json = '[{"target_detail_id":"66351031","first_name":"Dorothy",...';
$items = json_decode($json);
$items_array = (array) $items[0];

Json_decode还提供了一个自动返回数组的选项:json_decode($ json,true)。