PHP-从JSON响应中删除\n

PHP-从JSON响应中删除\n,php,json,newline,Php,Json,Newline,我有一个来自API调用的(简化的)JSON响应,如下所示 {"status":true,"action_values":"{\n \"range_from\": \"0\",\n \"range_to\": \"0\"\n}"} 我正在尝试使用PHP从上面删除\n字符,但它似乎不起作用 我尝试: $trimmed = str_replace("\n", "", $response); 其中,$response是我的JSON字符串,如上所述。但这不会删除/替换\n字符 无需删除\n/新行 相反

我有一个来自API调用的(简化的)JSON响应,如下所示

{"status":true,"action_values":"{\n \"range_from\": \"0\",\n \"range_to\": \"0\"\n}"}
我正在尝试使用PHP从上面删除\n字符,但它似乎不起作用

我尝试:

$trimmed = str_replace("\n", "", $response);

其中,$response是我的JSON字符串,如上所述。但这不会删除/替换\n字符

无需删除
\n
/新行

相反,您应该使用
json\u decode()
对字符串进行解码,然后您可以解码
range\u from
值,该值也是原始json中的json编码:

<?php
$str = '{"status":true,"action_values":"{\n \"range_from\": \"0\",\n \"range_to\": \"0\"\n}"}';

$dec = json_decode($str, true);

var_dump(json_decode($dec['action_values'], true));

.

我推荐@jeroen的解决方案,因为它使用PHPs本机函数来处理JSON

然而,既然您提出了这个问题,我感觉您还没有完全理解为什么您的解决方案不起作用

正如@B001在评论中指出的,您需要“\\n”来完成此任务:

$trimmed = str_replace("\\n", "", $response);
原因是“\n”表示新行字符,而“\\n”表示字符串“\n”

尝试下面的代码,您将看到不同之处

 print("-----");
 print("\n"); 
 print("-----");
 print("\\n");
 print("-----");
 print("\"");
这将产生以下输出:

 -----
 -----\n-----"
 hello
 world
 hello \n world\n
原因是代码中“\”字符的每个实例都会启动一个控制字符。例如“\n”表示换行符“\r”表示回车符“\t”表示制表符“\”表示由“”定义的字符串中的“-字符“\”,以及“\”表示实际反斜杠字符

因此,如果要创建包含\n的实际字符串,则必须告诉解释器您实际需要的是\-字符,而不是由\创建的控制字符以及后面的任何字符。这是通过使用双反斜杠“\\”来完成的,它是实际反斜杠字符串的字符串表示形式。这叫做“逃跑”

在本例中,$response变量中包含实际字符串,因此必须使用转义字符作为模式

最后让我解释一下“\n”和“\n”之间的区别。 PHP中有两种创建字符串的方法:

 $str1 = "hello \n world\n";
 $str2 = 'hello \n world\n';
 print($str1);
 print($str2);
 $name = "Daniel";
 $age = 18;
 $sentence = "My Friend $name is $age years old.";
 print($sentence);
这两个变量都将包含一个字符串,但是“-字符串表示PHP解释器应解释包含的字符串,而“-字符串则按原样提供字符串。因此,上面的示例将产生以下输出:

 -----
 -----\n-----"
 hello
 world
 hello \n world\n
这表明以下代码还将删除字符串中的\n实例,因为“\n”将包含实际字符串而不是控制字符:

 $trimmed = str_replace('\n', "", $response);
“-字符串的这种解释甚至允许在字符串中插入变量:

 $str1 = "hello \n world\n";
 $str2 = 'hello \n world\n';
 print($str1);
 print($str2);
 $name = "Daniel";
 $age = 18;
 $sentence = "My Friend $name is $age years old.";
 print($sentence);
并将导致:

 My Friend Daniel is 18 years old.

str\u replace(\\n“,…
对我有效似乎
action\u values
本身就是一个json。str\u replace(\\n“,…为我做了这个把戏。谢谢B001。如果你将此标记为答案,我会将其标记为已接受。