2017-11-28 20 views
1

私は以下のような配列を生成しました。しかし、json_encode.Amで解析できませんでした。私にお知らせください。配列文字列を解析できません

PHPコード:

<?php 

$i=0; 
$result = shell_exec('scripts/fetch_script.sh'); 

foreach(preg_split("/((\r?\n)|(\r\n?))/", $result) as $line) 
{ 
    parse_str($line); 

} 

$stat = "array("; 
    $lines = file('parameter.file'); 
    foreach ($lines as $line) { 
     $v = explode('|', strtoupper($line)); 
     $str = '$v[1]'; 
     eval("\$str = \"$str\";"); 
     eval("\$str = \"$str\";"); 
     $calc = eval("return round(($str),2);"); 

     $stat .="'$v[0]' => $calc,"; 


    } 
    $stat .=");"; 
echo json_encode($stat); 
?> 

しかし、その下にはJSON形式ではないような出力が表示さ:

"array('QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,'QUERY_CACHE_USAGE' => 0,'DISK_TMP_TABLES_USAGE' => 1.52,);" 
+1

** $ stat **は文字列ではありません。** var_dump($ stat); **で試してみてください。 – JON

+0

スクリプト内で使用されているvar_dumpがこの問題に直面しています。 .. .... var_dump($ stat); echo json_encode($ stat); 以下は出力です。 https://jpst.it/181m8 –

+0

json_encode($ stat、true)、パラメータjson_encodeにtrueを追加してください。 – illuminarch

答えて

1

あなたはJSONに変換しようとしている配列があることを意味し、重複を、持っています重複した鍵の最後の出現だけを保持します。たとえば、次のように

var_dump(['foo' => 'bar', 'foo' => 2]); //displays ["foo"] => int(2) 

あなたはすでにあなたにもまた、配列に文字列を評価するためにそれを使用する場合がありますevalを使用しているので:

echo json_encode(eval('return ' . $raw), JSON_PRETTY_PRINT); 

しかし、「evalが」1つの文字離れていることを知っていますか「悪」から。 parameter.fileの内容を信用しない限り、私はそれに頼るのを避けるでしょう。 evalに頼る代わりに手動でファイルを解析することをお勧めします。

関連する問題