0

私は、JSON オブジェクトをステップスルーして解析するコードに取り組んでいる PHP 開発者です。これにより、最終的な形式で出力する前にデータを操作できます。JSON の例を次に示します (非常に大きいため、必要なアイテムのほとんどを削除し、無効な部分を配置するだけです)。

[
    {
        "items": [
            {
                // this is valid and what I need.
            }
        ],
        "espots": [
            {
                "content": "
[TopNavigation_Appliances]
"
            }
        ]
    },

ソースから JSON を効果的に取り除き、厳密に json_decode() に渡される JSON データにしました。ただし、JSON オブジェクトにはコードが実際に機能する必要のない無効な部分があるため、常に null の結果が返されます。JSON の "espots" 部分全体はアプリケーション内では不要ですが、複数行の "content" 部分が json_decode() を台無しにしています。RegExまたはいくつかの気の利いたPHPを介してPHPに方法があり、JSON出力からこれらの項目を取り除き、json_decode()を適切に使用してn配列を取得し、コードが必要な方法で操作および処理できるようにしますに?

JSONLint (および他の 1 つのバリデーター) によって表示されるエラー メッセージを次に示します。

Parse error on line 263:
...         "content": "[TopNavigation_App
-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

「[が無効な JSON を引き起こしている」という情報を収集していますが、私は Json の専門家ではありません。

私は無駄に次のことを試みました:

  • 元の形式の行の str_replace()
  • trim() と str_replace
  • トリム()
  • str_replace 改行を削除してから、JSON の犯人部分を str_replace() しようとします。
4

2 に答える 2

2

JSON は文字列として入ってきますか? 「[」ではなく、角括弧の前にある改行が問題を引き起こしています。もしそうなら、おそらく次のように str_replace を使用できます:

$jsonStr = str_replace("\n", '', str_replace("\r", '', $jsonStr) );

しかし、コードを追加せずに確実に知ることは困難です。

于 2012-08-16T21:06:29.903 に答える
0

次の正規表現を使用して空白を取り除き、問題のある「espot」を上から取り除くことでこれを解決しました。

preg_replace('#, "espots":.*?}\s]#', '', preg_replace('/\s+/', ' ',$nearlyThere[0]));

次に、元の投稿にはなかったランダムな無効な文字列をマイナー str_replaces して、100% 有効にします。

于 2012-08-17T21:05:33.607 に答える