2016-05-02 11 views
2

次の出力は、R-データフレームをJson形式で保存したときに生成されます。私のデータフレームには、HTMLリンクとアクセント文字が混在しています。 PHP/Html環境でこのファイルを扱わなければなりません。json_decodeがjson形式で格納されたデータを含むテキストファイルを読み取れません

library(jsonlite) 
output_json <- toJSON(output, dataframe = "rows", pretty = T) 
write(output_json, file = "output.txt") 

    { 
    "PMID":"<a href= \"http://www.ncbi.nlm.nih.gov/pubmed/?term=19369233\" 
      target=\"_blank\">19369233</a>", 
    "Title":"Delayed achievement of cytogenetic and molecular response is 
      associated with increased risk of progression among patients with 
      chronic myeloid leukemia in early chronic phase receiving 
      high-dose or standard-dose imatinib therapy.", 
    "Author":"Quintás-Cardama A", 
    "Random author names":"Järås M", "Imrédi E", "Tímár J."  
}, 

私はhtmlページに最初の著者でアクセント文字や?などへの最後の著者の変更output.txtファイルやプリント出力を開く:Imr�di Eを。

以下のPHPコードデコードを使用してjsonファイルを読み込むと失敗し、NULLが返されます。研究の結果、私はその問題がアクセント文字から来ていることが確かであり、場合によっては新しい行\r\nまたはhtmlタグのエスケープも不適切であると確信しています。

!-- language: lang-php --> 
$r_output = file_get_contents('output.txt'); 
$array_json = json_decode($r_output, true); 

私は、次の提案等により修正しようとした:しかし、この問題を解決することができませんでしたHow do I handle newlines in JSON?またはPHP json_decode() returns NULL with valid JSON?など。

PHPとRのユーザーにタグを付けて、この問題を回避するためにJSON形式をRに書くより良い方法があるかどうかを調べるか、json形式をPHPで読み込む前にクリーンアップしますか?

は助け

+2

問題は、おそらく文字セットの不一致によって引き起こされます。私は、入力データがISO-8859であり、JSONが本質的にUTF8であると仮定しています。 – Sammitch

+1

はうまく動作しているように聞こえますが、ちょうどページエンコード –

+0

の@sammitchと一致していない可能性があります。 @ miken32、私はデフォルトで 'tojson'がUTF-8形式でエンコードすると考えました。書き込み関数が呼び出されるときにエンコーディングが必要であることを指摘していただきありがとうございます。リンクをありがとうございます。私はそれが重複しないことを願っています。おそらくtojson()関数の変換に対処しようとするのではなく、ファイル記述の観点から符号化の問題を解決することを考えていたはずです。方向性をありがとう – user5249203

答えて

2

ありがとうございutf8_encode$r_outputにしようとすると、行を削除すなわち破る:

$r_output = utf8_encode(file_get_contents('output.txt')); 
$r_output = preg_replace("/[\n\r]/","",$r_output); 
$array_json = json_decode($r_output, true); 

代わりutf8_decodeを試してみてください。

$r_output = utf8_decode(file_get_contents('output.txt')); 
$r_output = preg_replace("/[\n\r]/","",$r_output); 
$array_json = json_decode($r_output, true); 

PS:あなたのJSONはそう無効 - >"Imrédi E", Tímár J."

+0

json形式を修正しました。それに気づいてくれてありがとう。 – user5249203

1

はそもそもoutput file as UTF-8を書く:

library(jsonlite) 
output_json <- toJSON(output, dataframe = "rows", pretty = T) 
con<-file("output.txt", encoding="UTF-8") 
write(output_json, file = con) 
関連する問題