字符串到对象的转换

字符串到对象的转换

问题描述:

我正在循环一个数据库表,其中包含一些与外部API响应相关的数据。字符串到对象的转换

有人拯救响应为文本,就像这样:

object(stdClass)#5 (1) { 
    ["CreateProspectResult"]=> 
    object(stdClass)#6 (3) { 
    ["State"]=> 
    string(7) "Success" 
    ["ErrorMessage"]=> 
    string(0) "" 
    ["ReturnValue"]=> 
    object(stdClass)#7 (1) { 
     ["ProspectID"]=> 
     int(304) 
    } 
    } 
} 

我猜原来的开发商在做与<pre>标签一个var_dump(),并从字面上保存的响应。

当我遍历表结果时,我想将字符串转换回对象,所以我可以解析它。我失败了,很糟糕。

这是我已经尝试:

<?php 

$string = ' 
object(stdClass)#5 (1) { 
    ["CreateProspectResult"]=> 
    object(stdClass)#6 (3) { 
    ["State"]=> 
    string(7) "Success" 
    ["ErrorMessage"]=> 
    string(0) "" 
    ["ReturnValue"]=> 
    object(stdClass)#7 (1) { 
     ["ProspectID"]=> 
     int(304) 
    } 
    } 
} 
'; 

$xmlObj = simplexml_load_string($string); 
echo $xmlObj->CreateProspectResult->State; 
?> 

PHP不享受我的尝试,给我非对象相关的错误回来。

是否有可能采取这样的字符串并将其转换回对象?

+0

更新什么API返回的一个例子您的问题或您不能直接访问该API。除此之外,我不认为有任何准备去转换器从字符串到stdClass。 “ – Prix

+0

”有人将回复保存为文本,如下所示:“--​​- looooooooool – zerkms

+0

不幸的是,我无法直接访问API。我被告知回复是上面发布的内容。 – coffeemonitor

我不是100%确定这是否适用于对象(似乎是),但这似乎涵盖了您的问题。

function unvar_dump($str) { 
    if (strpos($str, "\n") === false) { 
     //Add new lines: 
     $regex = array(
      '#(\\[.*?\\]=>)#', 
      '#(string\\(|int\\(|float\\(|array\\(|NULL|object\\(|})#', 
     ); 
     $str = preg_replace($regex, "\n\\1", $str); 
     $str = trim($str); 
    } 
    $regex = array(
     '#^\\040*NULL\\040*$#m', 
     '#^\\s*array\\((.*?)\\)\\s*{\\s*$#m', 
     '#^\\s*string\\((.*?)\\)\\s*(.*?)$#m', 
     '#^\\s*int\\((.*?)\\)\\s*$#m', 
     '#^\\s*float\\((.*?)\\)\\s*$#m', 
     '#^\\s*\[(\\d+)\\]\\s*=>\\s*$#m', 
     '#\\s*?\\r?\\n\\s*#m', 
    ); 
    $replace = array(
     'N', 
     'a:\\1:{', 
     's:\\1:\\2', 
     'i:\\1', 
     'd:\\1', 
     'i:\\1', 
     ';' 
    ); 
    $serialized = preg_replace($regex, $replace, $str); 
    $func = create_function(
     '$match', 
     'return "s:".strlen($match[1]).":\\"".$match[1]."\\"";' 
    ); 
    $serialized = preg_replace_callback(
     '#\\s*\\["(.*?)"\\]\\s*=>#', 
     $func, 
     $serialized 
    ); 
    $func = create_function(
     '$match', 
     'return "O:".strlen($match[1]).":\\"".$match[1]."\\":".$match[2].":{";' 
    ); 
    $serialized = preg_replace_callback(
     '#object\\((.*?)\\).*?\\((\\d+)\\)\\s*{\\s*;#', 
     $func, 
     $serialized 
    ); 
    $serialized = preg_replace(
     array('#};#', '#{;#'), 
     array('}', '{'), 
     $serialized 
    ); 

    return unserialize($serialized); 
} 

来源: Convert var_dump of array back to array variable