2017-11-28 8 views
0

私が使用して上から\ nは文字を削除しようとしていますPHP - JSON応答から、 nを削除

{"status":true,"action_values":"{\n \"range_from\": \"0\",\n \"range_to\": \"0\"\n}"} 

下回るように見えるAPI呼び出しから(簡体字)JSONレスポンスを持っていますPHPは動作していないようです。

は、私が試してみてください。$応答は、上記のように私のJSON文字列である

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

。しかし、これは、\ n文字を削除/置き換えません。

+4

' str_replace(-stringは、変数が文字列に挿入されるのを可能にするように、これまで行きます" \ n "、...'は私のために働きます –

+0

'action_values'はjson自体です。 –

+0

str_replace( "\\ n"、...私のためのトリックでした。ありがとうB001。 – heyred

答えて

1

PHPのネイティブ関数を使用してJSONを処理するため、@jeroenのソリューションをお勧めします。

しかし、あなたが質問したので、あなたのソリューションがうまくいかなかった理由を完全に理解していないと感じます。

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

この理由は、「\ nを」改行文字を表していること、であるとき」:

としては、すでに「\\ n」は、このタスクのために必要なの@ B001のコメントで指摘しました\\ n "は文字列" \ n "を表します。

次のコードを試してみて、次のような出力になります違い

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

が表示されます。

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

その理由は、「\」の文字のすべてのインスタンスコードで制御文字を開始します。例としては、改行の場合は "\ n"、復帰の場合は "\ r"、タブの場合は "\ t"、実際のバックスラッシュの場合は "\"で定義された文字列の中の "キャラクター。

したがって、\ nを含む実際の文字列を作成したい場合は、\によって作成された制御文字ではなく、実際に\文字が必要であることをインタプリタに伝える必要があります。これは、実際のバックスラッシュ文字列の文字列表現である二重バックスラッシュ「\\」を使用して行います。これは「エスケープ」と呼ばれます。

あなたの場合は、$ response変数に実際の文字列があります。そのため、エスケープ文字をパターンとして使用する必要があります。

最後に、「\ n」と「\ n」の違いについて説明します。 文字列を作成するには、PHPでの2つの方法があります。「-stringながら

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

は両方の変数が文字列が含まれていますが、しかし、「-stringは、含まれる文字列が解釈されるべきであることをPHPインタプリタのために示し、

hello 
world 
hello \n world\n 

これは「\ nは」が含まれますので、以下のコードも\ n個のインスタンスのあなたの文字列を削除することを示しています。上記の例では、その結果は次のような出力の場合とそのままあなたの文字列を与えます制御文字ではなく実際の文字列:

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

のこの解釈 ":

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

とにつながる

My Friend Daniel is 18 years old. 
7

\n /改行を削除する必要はありません。

代わりに、あなたはjson_decode()を使用して文字列をデコードする必要があり、その後、あなたはまた、JSON、あなたの元のJSON内で符号化されているrange_from値、デコードすることができます:

<?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を。

関連する問題