2017-08-24 23 views
-3

の一部は:PHPのにpreg_replace私は、次のJSON文字列を持っているJSONコンテンツ

本当の本番使用で
{ 
    "time":"321321545646", 
    "documents":[ 
     {"name":"name1","body":"HASH_BASE64 1"}, 
     {"name":"name2","body":"HASH_BASE64 2"} 
    ] 
} 

、 "HASHのBASE64は、" 文字列をbase64エンコードされます。

{ 
    "time":"321321545646", 
    "documents":[ 
     {"name":"name1","body":"LONGSTRING"}, 
     {"name":"name2","body":"LONGSTRING"} 
    ] 
} 

: どのように私はこのような何かを受け取るために文字列=「のLongString」、とそれぞれ「身体」タグの内容を置き換えることができますか?

+1

'preg_replace'では特にありません – iainn

+0

['json_decode()'](http://php.net/manual/en/function.json-decode.php)を使ってJSONを配列にデコードし、値を変更し、['json_encode()']を使うhttp://php.net/manual/en/function.json-encode.php)をJSONとしてエンコードします。 – axiac

+0

@MacBoocどのようにJSONに関連する質問がリンクされていますか? – axiac

答えて

0

おそらく、正規表現でそれを行うが、デコードすることにより、再びデータおよびエンコーディングを変更しないでください。

$data = json_decode($json); 

for($i = 0; $i < count($data->documents); $i++) { 
    $data->documents[$i]->body = "LONGSTRING"; 
} 

$json = json_encode($data); 
+0

私は正規表現を使いたい理由があります。このJSONはcomunicationログの一部です。それ以上の変更。さらに、適切なJSON文字列である必要はない場合もありますが、エラーが発生することがあります。 – k605543016

0

あなたはJSONデータを修正するために正規表現を使用してはならない - PHPは用のネイティブ機能を持っていますそれを解析してエンコードします。あなたはJSON形式のドキュメントを次にjson_decode()

によりループをあなたのJSONをデコードし、そうのように、各文書データを変更するだけでpreg-replace()を必要としないhttp://php.net/manual/en/ref.json.php

<?php 
$json = '{ 
    "time":"321321545646", 
    "documents":[ 
     {"name":"name1","body":"HASH_BASE64 1"}, 
     {"name":"name2","body":"HASH_BASE64 2"} 
    ] 
}'; 

// Decode JSON into a native PHP object structure 
$decoded = json_decode($json); 

// Loop over each element, and modify the body 
$decoded->documents = array_map(function ($document) { 
    $document->body = 'LONGSTRING'; 
    return $document; 
}, $decoded->documents); 

// Re-encode 
echo json_encode($decoded); 
1

を参照してください:

$json = json_decode('{ 
    "time":"321321545646", 
    "documents":[ 
     {"name":"name1","body":"HASH_BASE64 1"}, 
     {"name":"name2","body":"HASH_BASE64 2"} 
    ] 
}'); 
foreach ($json->documents as $document){ 
    $document->body = "LONGSTRING"; 
} 
dump($json); 

これは出力です:

{#229 ▼ 
    +"time": "321321545646" 
    +"documents": array:2 [▼ 
    0 => {#228 ▼ 
     +"name": "name1" 
     +"body": "LONGSTRING" 
    } 
    1 => {#227 ▼ 
     +"name": "name2" 
     +"body": "LONGSTRING" 
    } 
    ] 
} 
関連する問題