我有这个$ str值:
[{\"firstname\":\"guest1\",\"lastname\":\"one\",\"age\":\"22\",\"gender\":\"Male\"},{\"firstname\":\"guest2\",\"lastname\":\"two\",\"age\":\"22\",\"gender\":\"Female\"}]
我想将其拆分为以下内容:
firstname:guest1,lastname:one,age:22
firstname:guest2,lastname:two,age:22
我尝试了explode (",",$str)
,但是它爆炸了所有使用,作为分隔符,我没有得到我想要的
任何人都可以帮助我吗?
答案 0 :(得分:5)
正如Josh K所指出的那样,看起来很像JSON字符串。也许你应该在它上面json_decode()
来获取你正在寻找的实际的数据,所有这些都很好地组织成一个对象数组。
编辑:看来你的字符串本身包含在双引号"
中,因此在你能够将其解码为有效的JSON之前,你必须将它们修剪掉:
$str_json = trim($str, '"');
$guests = json_decode($str_json);
var_dump($guests);
我使用var_dump()
获得此输出,因此它绝对是有效的JSON:
array(2) {
[0]=>
object(stdClass)#1 (4) {
["firstname"]=>
string(6) "guest1"
["lastname"]=>
string(3) "one"
["age"]=>
string(2) "22"
["gender"]=>
string(4) "Male"
}
[1]=>
object(stdClass)#2 (4) {
["firstname"]=>
string(6) "guest2"
["lastname"]=>
string(3) "two"
["age"]=>
string(2) "22"
["gender"]=>
string(6) "Female"
}
}
JSON (JavaScript Object Notation)不是CSV (comma-separated values)。它们是两种截然不同的数据格式,因此您无法像另一种那样解析它们。
要获取两个字符串,请使用循环获取每个对象的键和值,然后使用这些值构建字符串:
foreach ($guests as $guest) {
$s = array();
foreach ($guest as $k => $v) {
if ($k == 'gender') break;
$s[] = "$k:$v";
}
echo implode(',', $s) . "\n";
}
输出:
firstname:guest1,lastname:one,age:22
firstname:guest2,lastname:two,age:22
(假设您确实想要出于某种原因排除性别;如果不是,请删除if ($k == 'gender') break;
行。)
答案 1 :(得分:0)
如果你在,
分开,那么你将获得围绕它的所有其他废话。然后你必须将其剥离。
看起来很像我的JSON数据,这个字符串来自哪里?
答案 2 :(得分:0)
如果这是有效的json,只需通过json_decode()
运行即可获得本机php数组......
请注意,您可能需要首先通过stripslashes()
运行它,因为看起来您可能已设置magic_quotes_gpc
...您可以通过使用函数get_magic_quotes_gpc
进行有条件调用:
if (get_magic_quotes_gpc()) {
$_POST['foo'] = stripslashes($_POST['foo']);
}
$array = json_decode($_POST['foo']);
答案 3 :(得分:0)
您需要使用 preg_replace 功能。
$ptn = "/,\\"gender\\":\\"\w+\\"\}\]?|\\"|\[?\{/";
$str = "[{\"firstname\":\"guest1\",\"lastname\":\"one\",\"age\":\"22\",\"gender\":\"Male\"},{\"firstname\":\"guest2\",\"lastname\":\"two\",\"age\":\"22\",\"gender\":\"Female\"}]";
$rpltxt = "";
echo preg_replace($ptn, $rpltxt, $str);
您可以php regular expression tester来测试结果。
或使用 preg_match_all
$ptn = "/(firstname)\\":\\"(\w+)\\",\\"(lastname)\\":\\"(\w+)\\",\\"(age)\\":\\"(\d+)/";
$str = "[{\"firstname\":\"guest1\",\"lastname\":\"one\",\"age\":\"22\",\"gender\":\"Male\"},{\"firstname\":\"guest2\",\"lastname\":\"two\",\"age\":\"22\",\"gender\":\"Female\"}]";
preg_match_all($ptn, $str, $matches);
print_r($matches);
答案 4 :(得分:0)
我仍然没有机会检索JSON: 我将修剪后的值var_dump为:
$str_json = trim($userdetails->other_guests, '"');
$guests = json_decode($str_json);
var_dump($str_json,$guests);
WHERE $userdetails->other_guests
是我以前的$str
值...
我得到以下输出:
string(169) "[{\"firstname\":\"guest1\",\"lastname\":\"one\",\"age\":\"22\",\"gender\":\"Male\"},{\"firstname\":\"guest2\",\"lastname\":\"two\",\"age\":\"23\",\"gender\":\"Female\"}]"
NULL
这意味着解码的json是NULL ...奇怪