0

http://www.learnpython.org/Serialization_using_JSON_and_pickle

手順は次のとおりです。

この演習の目的は、キーと値のペア "Me" : 800 が追加された JSON 文字列を出力することです。

以下は、変更する必要がある開始コードです。

#Exercise fix this function, so it adds the given name and salary pair to the json it returns
def add_employee(jsonSalaries, name, salary): 
    # Add your code here

    return jsonSalaries 

#Test code - shouldn't need to be modified
originalJsonSalaries = '{"Alfred" : 300, "Jane" : 301 }'
newJsonSalaries = add_employee(originalJsonSalaries, "Me", 800)
print(newJsonSalaries)

私は完全に迷っています。JSON のレッスンは、せいぜい短いものでした。私がここで実行しているように見える問題は、それorginalJsonSalariesが文字列として定義されていることです(括弧のようなあらゆる種類の不要な記号を含みます。実際、その定義を囲む単一引用符が削除されたoriginalJsonSalaries場合、辞書になり、これは次のようになりますはるかに簡単ですが、現状では、文字列に and を追加し、辞書のような書式設定を維持するにはどうすればよい"Me"でしょ800うか?

はい、私はコーディングに非常に慣れていません。私が知っている他の言語は tcl だけです。

編集:

OK、答えのおかげで、私は密集していることがわかったので、次のコードを書きました。

import json
#Exercise fix this function, so it adds the given name and salary pair to the json it returns
def add_employee(jsonSalaries, name, salary):
    # Add your code here
    jsonSalaries = json.loads(jsonSalaries)
    jsonSalaries["Me"] = 800
    return jsonSalaries 

#Test code - shouldn't need to be modified
originalJsonSalaries = '{"Alfred" : 300, "Jane" : 301 }'
newJsonSalaries = add_employee(originalJsonSalaries, "Me", 800)
print(newJsonSalaries)

これは動作しません。何らかの理由で、元の辞書キーは Unicode としてフォーマットされているため (どこで発生したかはわかりません)、辞書を印刷すると "u" フラグが表示されます。

{u'Jane': 301, 'Me': 800, u'Alfred': 300}

dict.pop()キー( )を置き換えるために使用しようとしましdict("Jane") = dict.pop(u"Jane")たが、それだけで表示されますSyntaxError: can't assign to function call

私の元の解決策は間違っていますか、それともこれは迷惑なフォーマットの問題であり、その解決方法はありますか?

4

3 に答える 3

4

リンク先のページには、これを行う方法が正確に記載されています。

json モジュールを使用するには、まずインポートする必要があります。

import json

[...]

JSON をデータ構造にロードするには、"loads" メソッドを使用します。このメソッドは文字列を受け取り、それを json オブジェクトのデータ構造に戻します。

print json.loads(json_string)

彼らはあなたに文字列 ( jsonSalaries) を渡しました。json.loads辞書に変換するために使用します。

于 2013-09-27T20:28:04.253 に答える
0

最後の質問は新しい質問ですが... そのような辞書を印刷するときは、python がその変数の内容を意味のある方法で表示するのに十分優れているという事実を使用しているだけです。独自の形式で辞書を出力するには、キーを反復処理してキーと値を出力します。

for k in newJsonSalaries:
    print("Employee {0} makes {1}".format(k, newJsonSalaries[k]))

あなたのコードには他の問題があります....

add employee 関数内で JSON をロードするのは奇妙です。それは別のはずです...

また、関数では、渡されたand変数を使用する代わりに、andadd_employee()の同じ値を常に追加するように配線されているため、その行は次のようになります。Me800namesalary

jsonSalaries[name] = salary
于 2013-09-27T21:51:50.790 に答える
0

これを使って:

import json
def add_employee(jsonSalaries, name, salary):
    # Add your code here
    jsonSalaries = json.loads(jsonSalaries)
    jsonSalaries[name] = salary
    jsonSalaries = json.dumps(jsonSalaries)
    return jsonSalaries

#Test code - shouldn't need to be modified
originalJsonSalaries = '{"Alfred" : 300, "Jane" : 301 }'
newJsonSalaries = add_employee(originalJsonSalaries, "Me", 800)
print(newJsonSalaries)

jsonSalaries を返す前にこれを追加します。

jsonSalaries = json.dumps(jsonSalaries)
于 2013-11-11T08:04:50.660 に答える