【问题标题】:PHP - Removing \n from JSON responsePHP - 从 JSON 响应中删除 \n
【发布时间】:2017-11-28 12:54:54
【问题描述】:

我有一个来自 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 字符。

【问题讨论】:

  • str_replace("\\n", ... 为我工作
  • 看来action_values本身就是一个json。
  • str_replace("\\n", ... 对我有用。谢谢 B001。如果您将此标记为答案,我会将其标记为已接受。

标签: php json newline


【解决方案1】:

无需删除\n / 换行符。

相反,您应该使用 json_decode() 解码您的字符串,然后您可以解码 range_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));

结果:

array(2) {
  ["range_from"]=>
  string(1) "0"
  ["range_to"]=>
  string(1) "0"
}

An example.

【讨论】:

    【解决方案2】:

    我会推荐@jeroen 的解决方案,因为它利用 PHP 的原生函数来处理 JSON。

    但是,既然你问了,我感觉你并不完全理解为什么你的解决方案不起作用。

    正如@B001 在 cmets 中已经指出的那样,您需要 "\\n" 来完成此任务:

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

    原因是,当“\\n”代表字符串“\n”时,“\n”代表换行符。

    试试下面的代码,你会发现区别

     print("-----");
     print("\n"); 
     print("-----");
     print("\\n");
     print("-----");
     print("\"");
    

    这将导致以下输出:

     -----
     -----\n-----"
    

    这样做的原因是代码中“\”字符的每个实例都以控制字符开头。例如,“\n”表示换行符,“\r”表示回车,“\t”表示制表符,“\”表示由“”定义的字符串中的“-字符”,“\\”表示实际的反斜杠-字符。

    因此,如果您想创建包含 \n 的实际字符串,您必须告诉解释器您实际上想要的是 \-字符,而不是由 \ 创建的控制字符以及后面的任何字符。这是通过使用双反斜杠“\\”来完成的,它是实际反斜杠字符串的字符串表示。这就是所谓的“转义”。

    在您的情况下,您的 $response 变量中有实际的字符串,因此您必须使用转义字符作为模式。

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

     $str1 = "hello \n world\n";
     $str2 = 'hello \n world\n';
     print($str1);
     print($str2);
    

    这两个变量都将包含一个字符串,但是,“-string 向 PHP 解释器指示应该解释所包含的字符串,而 '-string 则按原样为您提供字符串。上面的示例将因此导致以下输出:

     hello
     world
     hello \n world\n
    

    这表明以下代码也将删除您的字符串中的 \n 实例,因为 '\n' 将包含实际字符串而不是控制字符:

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

    “-string”的这种解释甚至允许将变量插入到字符串中:

     $name = "Daniel";
     $age = 18;
     $sentence = "My Friend $name is $age years old.";
     print($sentence);
    

    会导致:

     My Friend Daniel is 18 years old.
    

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 2017-04-24
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多