2016-12-20 15 views
5

以下のjavascriptメソッドがあります。私はIDをデータパラメータから取得しようとします。JavaScriptを使用して文字列をjsonオブジェクトに変換する方法

data(spark, data){ 
    console.log('receive ', data) 
    console.log(data.id) 
    } 

第一出力線はreceive {id:1}

であるが、第2出力線はundefined

次いでIオブジェクトにJSON文字列を変換する方法を下回る試みである:

data(spark, data){ 
    console.log('receive ', data) 
    console.log(JSON.parse(JSON.stringify(data)).id) 

Iはまだ同じ出力を得ました。なぜ入力パラメータからIDを取得できないのですか?

EDIT1

私は以下のように関数名と異なるようにパラメータ名を変更:

data(spark, d){ 
    console.log('receive ', d) 
    console.log(JSON.parse(JSON.stringify(d)).id) 
} 

が、私はまだ同じ出力を得ました。

+3

'id'は、二重引用符でラップしなければならないことに注意してください、そして、あなたは'のvar JSON = JSON.parse(データ)を使用することができます。 console.log(json。id); ' – Tushar

+0

idが二重引用符で囲まれていない場合は、それをjsonオブジェクトに変換する方法は? –

+1

なぜ、関数名と変数名を同じにしたいのですか? – randominstanceOfLivingThing

答えて

2

注要求される:注意の強い言葉を。これが機能するかどうかを確認するだけで動作します。予期しない状況で使用しないでください。 非常に危険です!

一つの狂気の事はあなたがフロント関数名の、functionキーワードを忘れてしまった、あります。

このためeval()としよう:

function data(spark, d) { 
 
    // console.log('receive ', d); 
 
    eval("d = " + d); 
 
    console.log(d.id); 
 
} 
 
data("", "{id: 5}");

+0

私の関数はクラス(es6)内で定義されているので、関数キーワードはありません。私はあなたのアプローチを試してみました。それは危険です。それを行うための他の方法はありますか? –

+0

現在の実装では、有効な方法があるかどうかわかりません。 –

+0

Downvoterが理由を教えてくれました... ':)' –

-2

のeval( "(" +データ+ ")")IDはすべては

function data(spark, data) { 
 
    alert(eval("(" + data + ")").id); 
 
} 
 

 
data("", "{id:3}");

+0

私は試しましたが、同じ出力を得ました –

+0

これはデータが '{" id ":1}'でデータは '{id:1}'なのでJSON.parseはエラー – slebetman

+0

@slebetmanを投げます。仕事 – theliberalsurfer

0

つの答え:

  1. サーバが適切に形成されてJSONを下に送っている(キー名を二重引用符付き) 。これが望ましい解決策です。

  2. リラックスしたJSONパーサーを使用します。あなたはnpmでそのようなものを検索して見つけることができます。

  3. evalを使用してください。

  4. あなたがそれをJSON.parse、または1を抽出し、または任意のあなたがやりたいことができるように二重引用符でidを囲むために、いくつかの文字列操作を行います。これは最も推奨されないソリューションです。

+0

** 1。**サーバーが制御不能な場合はどうなりますか? ** 2。** NPM?真剣に? –

+0

私はリラックスした/汚いパーサーの使用を推奨していませんが、evalよりも優れていると思います。 npmの問題は何ですか?他にどこを探しに行くのですか? –

+0

私はNPMがNodeのためだと思ったのですか?私が間違っている? –

関連する問題