1

次の JSON データがあるとします。

{ "_id" : { "$oid" : "string" }, "titulo" : "string", "id_cv" : 1132, "textos" : [ { "fecha" : { "$date" : 1217376000000 }, "estado" : "string", "texto" : "string", "source_url" : "string" } ] }
{ "_id" : { "$oid" : "string" }, "titulo" : "string", "autores" : ",\"string\",\"string\",\"string\",\"string",5", "id_cv" : 1138, "textos" : [ { "fecha" : { "$date" : 1217548800000 }, "estado" : "string", "texto" : "string", "source_url" : "string" } ] }

JSON データを R にインポートし、最終的に R データ フレームに変換しようとしています。

R に次のスクリプトがあるとします。

library("rjson")
json_file <- "/Users/usr/file/json_data.json"
json_data <- fromJSON(paste(readLines(json_file), collapse=""))

data = unlist(json_data)

title=data[names(data)=="titulo"]
print(title)

text=data[names(data)=="textos.texto"]
print(text)

url=data[names(data)=="textos.source_url"]
print(url)

このスクリプトを実行すると、JSON データは、JSON データ ファイルの最初の行を含むデータ フレームのみを生成します。約200行あります。私が認識している問題の 1 つは、JavaScript が複数行の文字列を「許可」しないことです。私はさまざまな方法でこれに対処しようとしました:

  1. データの各「行」の間に「"」を追加します。
  2. データの各「行」の末尾に「"」を追加します。
  3. データの各「行」の間に「\」を追加します。
  4. データの各「行」の末尾に「\」を追加します。
  5. 複数の行をすべて 1 行に変換します (「\n」を「\n」に置き換えます)。

上記のすべては、正規表現を使用して試みられました。

私の質問は次のとおりです。データのすべての「行」がRに読み込まれるようにJSONデータを操作して、それらをリストから外し、「タイトル」、「テキスト」に等しい列を持つ適切なデータフレームを構築するにはどうすればよいですか? 、「url」、行は JSON データの「行」と同じですか?

R の RJSON ライブラリと RJSONIO ライブラリの両方を使用してこれを試みましたが、最終的に問題は JSON データ自体のフォーマットにあると考えているため、現時点でどちらを使用するかについては曖昧です。

4

2 に答える 2

2

JSON 文字列自体は、実際にはまったく正しくありませんでした。

  1. 文字列の 1 つに欠落があった\ため、1 つの引用符が適切にマスクされていませんでした"autores" : ",\"string\",\"string\",\"string\",\"string",5":"autores" : ",\"string\",\"string\",\"string\",\"string\",5"
  2. 個々の{}オブジェクト (1 行目と 2 行目、あなたが呼んでいるように) は、JSON 構造がどのように解釈されるかが明確に定義されていないため、配列 ( []) またはオブジェクト (識別子付き) のいずれかの上部構造に結合する必要があります。 {}.

JSON 文字列を 2 つの配列要素で構成するように変更し、それぞれに 1 つの行 (=1 つの JSON オブジェクト) を含めます。

[{ "_id" : { "$oid" : "string" },
     "titulo" : "string",
     "id_cv"  : 1132, 
     "textos" : [ { "fecha" : { "$date" : 1217376000000 }, 
                               "estado" : "string", 
                               "texto"  : "string",
                           "source_url" : "string" } ] },

 { "_id" : { "$oid" : "string" },
     "titulo" : "string", 
     "autores" : ",\"string\",\"string\",\"string\",\"string\",5",
     "id_cv" : 1138,
     "textos" : [ { "fecha" : { "$date" : 1217548800000 },
                               "estado" : "string",
                                "texto" : "string", 
                           "source_url" : "string" } ] }]

読みやすくするために改行を追加しました。改行文字と空白 (個々の識別子または文字列の外側) は、JSON パーサーによって無視されます。

于 2013-07-29T16:53:50.417 に答える