อะไรคือความแตกต่างระหว่างโมดูล json และ simplejson Python


381

ฉันเห็นหลายโครงการที่ใช้simplejsonโมดูลแทนjsonโมดูลจากไลบรารีมาตรฐาน นอกจากนี้ยังมีsimplejsonโมดูลที่แตกต่างกันมากมาย เหตุใดจึงต้องใช้ทางเลือกเหล่านี้แทนที่จะเป็นตัวเลือกในไลบรารีมาตรฐาน

คำตอบ:


391

json คือ simplejsonเพิ่มลงใน stdlib แต่เนื่องจากjsonถูกเพิ่มเข้ามาใน 2.6simplejsonมีข้อได้เปรียบในการทำงานกับเวอร์ชัน Python เพิ่มเติม (2.4+)

simplejsonยังได้รับการปรับปรุงบ่อยกว่า Python ดังนั้นหากคุณต้องการ (หรือต้องการ) เวอร์ชันล่าสุดจะเป็นการดีที่สุดหากใช้simplejsonตัวเอง

การปฏิบัติที่ดีในความคิดของฉันคือการใช้อย่างใดอย่างหนึ่งเป็นทางเลือก

try:
    import simplejson as json
except ImportError:
    import json

2
ตอนนี้ถ้าฉันทำได้เพียงหยุดการบ่นredefinition of unused 'json'
James McMahon

5
พวกเขาจะไม่เหมือนกันหรือเข้ากันได้ Simplejson มี JSONDecodeError และ json มี ValueError
Bjorn

3
@BjornTipling JSONDecodeErrorเป็นคลาสย่อยของValueError
elhefe

30
ฉันไม่เห็นด้วยกับคำตอบข้างต้นสมมติว่าคุณมี Python ที่ทันสมัย ห้องสมุด Json ในตัว (ยอดเยี่ยม !!! ดูคำตอบstackoverflow.com/a/16131316/78234
Tal Weiss

1
ดูเหมือนว่า Python2.7 json จะใช้ simplejson v2.0.9 ซึ่งอยู่ด้านหลังของ simplejson v3.6.5 ที่เขียนอยู่ มีการปรับปรุงมากมายที่คุ้มค่ากับการนำเข้าแบบเรียบง่าย
Kenji Noguchi

82

ฉันต้องไม่เห็นด้วยกับคำตอบอื่น ๆ : ที่สร้างขึ้นในjsonห้องสมุด (ในหลาม 2.7) simplejsonไม่จำเป็นต้องช้ากว่า นอกจากนี้ยังไม่ได้มีนี้ข้อผิดพลาดที่น่ารำคาญ Unicode

นี่คือมาตรฐานที่เรียบง่าย:

import json
import simplejson
from timeit import repeat

NUMBER = 100000
REPEAT = 10

def compare_json_and_simplejson(data):
    """Compare json and simplejson - dumps and loads"""
    compare_json_and_simplejson.data = data
    compare_json_and_simplejson.dump = json.dumps(data)
    assert json.dumps(data) == simplejson.dumps(data)
    result = min(repeat("json.dumps(compare_json_and_simplejson.data)", "from __main__ import json, compare_json_and_simplejson", 
                 repeat = REPEAT, number = NUMBER))
    print "      json dumps {} seconds".format(result)
    result = min(repeat("simplejson.dumps(compare_json_and_simplejson.data)", "from __main__ import simplejson, compare_json_and_simplejson", 
                 repeat = REPEAT, number = NUMBER))
    print "simplejson dumps {} seconds".format(result)
    assert json.loads(compare_json_and_simplejson.dump) == data
    result = min(repeat("json.loads(compare_json_and_simplejson.dump)", "from __main__ import json, compare_json_and_simplejson", 
                 repeat = REPEAT, number = NUMBER))
    print "      json loads {} seconds".format(result)
    result = min(repeat("simplejson.loads(compare_json_and_simplejson.dump)", "from __main__ import simplejson, compare_json_and_simplejson", 
                 repeat = REPEAT, number = NUMBER))
    print "simplejson loads {} seconds".format(result)


print "Complex real world data:" 
COMPLEX_DATA = {'status': 1, 'timestamp': 1362323499.23, 'site_code': 'testing123', 'remote_address': '212.179.220.18', 'input_text': u'ny monday for less than \u20aa123', 'locale_value': 'UK', 'eva_version': 'v1.0.3286', 'message': 'Successful Parse', 'muuid1': '11e2-8414-a5e9e0fd-95a6-12313913cc26', 'api_reply': {"api_reply": {"Money": {"Currency": "ILS", "Amount": "123", "Restriction": "Less"}, "ProcessedText": "ny monday for less than \\u20aa123", "Locations": [{"Index": 0, "Derived From": "Default", "Home": "Default", "Departure": {"Date": "2013-03-04"}, "Next": 10}, {"Arrival": {"Date": "2013-03-04", "Calculated": True}, "Index": 10, "All Airports Code": "NYC", "Airports": "EWR,JFK,LGA,PHL", "Name": "New York City, New York, United States (GID=5128581)", "Latitude": 40.71427, "Country": "US", "Type": "City", "Geoid": 5128581, "Longitude": -74.00597}]}}}
compare_json_and_simplejson(COMPLEX_DATA)
print "\nSimple data:"
SIMPLE_DATA = [1, 2, 3, "asasd", {'a':'b'}]
compare_json_and_simplejson(SIMPLE_DATA)

และผลลัพธ์ในระบบของฉัน (Python 2.7.4, Linux 64 บิต):

ข้อมูลโลกแห่งความซับซ้อนที่ซับซ้อน:
json dumps 1.56666707993 วินาที
simplejson dumps 2.25638604164 วินาที
json load 2.71256899834 วินาที
simple json load 1.29233884811 วินาที

ข้อมูลง่าย ๆ :
json dumps 0.370109081268 วินาที
simplejson dumps 0.574181079865 วินาที
json load 0.422876119614 วินาที
simple json load 0.270955085754 วินาที

สำหรับการทุ่มตลาดจะเร็วกว่าjson simplejsonสำหรับการโหลดsimplejsonจะเร็วกว่า

เนื่องจากฉันกำลังสร้างบริการบนเว็บ dumps()จึงมีความสำคัญมากกว่า - และการใช้ห้องสมุดมาตรฐานเป็นที่ต้องการเสมอ

ยังcjsonไม่ได้รับการปรับปรุงในช่วง 4 ปีที่ผ่านมาดังนั้นฉันจะไม่แตะต้องมัน


นี่เป็นสิ่งที่ทำให้เข้าใจผิด คำตอบของฉันด้านล่างอธิบายว่าทำไม
notbad.jpeg

2
บน Win7 PC ของฉัน (i7 CPU), json(CPython 3.5.0) นั้นเร็วขึ้น 68% | 45% สำหรับการถ่ายโอนข้อมูลที่ซับซ้อนและ 35% | 17% สำหรับการโหลดแบบซับซ้อนที่ซับซ้อน wrt simplejsonv3.8.0 พร้อมการเร่งความเร็ว C โดยใช้รหัสมาตรฐานของคุณ ดังนั้นฉันจะไม่ใช้ simplejson อีกต่อไปกับการตั้งค่านี้
mab

1
ฉันเพิ่งใช้งาน Python 3.6.1 และjsonชนะหรือเหมือนกันสำหรับการทดสอบทั้งหมด ในความjsonเป็นจริงเป็นเพียงเล็กน้อยภายใต้สองเท่าของการทดสอบทิ้งข้อมูลโลกแห่งความซับซ้อน!
CpILL

27

ทุกคำตอบเหล่านี้ไม่ได้เป็นประโยชน์มากเพราะพวกเขามีเวลาที่สำคัญ

หลังจากทำวิจัยของฉันเองฉันพบว่าsimplejsonเร็วกว่า builtin จริง ๆถ้าคุณปรับปรุงมันให้เป็นเวอร์ชั่นล่าสุด

pip/easy_installต้องการติดตั้ง 2.3.2 บน Ubuntu 12.04 แต่หลังจากการค้นหาsimplejsonเวอร์ชั่นล่าสุดเป็นจริง 3.3.0 ดังนั้นฉันจึงอัปเดตและรันการทดสอบเวลาอีกครั้ง

  • simplejsonเร็วกว่าตัวสร้างjsonแรงประมาณ 3 เท่า
  • simplejsonประมาณ 30% เร็วกว่า builtin jsonที่ทิ้ง

Disclaimer:

ข้อความข้างต้นอยู่ใน python-2.7.3 และ simplejson 3.3.0 (ด้วย c speedups) และเพื่อให้แน่ใจว่าคำตอบของฉันยังไม่ไวต่อเวลาคุณควรรันการทดสอบของคุณเองเพื่อตรวจสอบเนื่องจากแตกต่างกันมากระหว่างรุ่น; ไม่มีคำตอบง่ายๆที่ไม่คำนึงถึงเวลา

จะทราบได้อย่างไรว่ามีการเปิดใช้งานการเพิ่มความเร็ว C ใน simplejson:

import simplejson
# If this is True, then c speedups are enabled.
print bool(getattr(simplejson, '_speedups', False))

UPDATE:ฉันเพิ่งเจอห้องสมุดชื่อujsonที่เร็วกว่าsimplejsonการทดสอบพื้นฐานประมาณ 3 เท่า


ขอบคุณที่พูดถึง ujson อันนี้นำฉันไปสู่ห้องสมุดRapidJSONอีกแห่งที่ดูดีกว่า
MCMZL

"simplejson 3.3.0 (with c speedups)" โอ้จริงเหรอ? มีความซื่อสัตย์มากขึ้นและทดสอบโดยไม่ต้องเร่งความเร็ว c
Reishin

อย่าใช้ ujson มันเต็มไปด้วยข้อบกพร่องและการรั่วไหลของหน่วยความจำและตัวแฮกเกอร์และยังไม่ได้รับการปรับปรุงในบางเวลา เราได้ทำการทิ้งและเปลี่ยนเป็น simplejson เนื่องจากมันมีฟังก์ชั่นการใช้งานมากกว่า json และได้รับการอัปเดต
amohr

21

ฉันเคยทำการเปรียบเทียบ json, simplejson และ cjson

  • cjson เร็วที่สุด
  • simplejson ใกล้เคียงกับ cjson
  • json ช้ากว่า simplejson ประมาณ 10 เท่า

http://pastie.org/1507411 :

$ python test_serialization_speed.py 
--------------------
   Encoding Tests
--------------------
Encoding: 100000 x {'m': 'asdsasdqwqw', 't': 3}
[      json] 1.12385 seconds for 100000 runs. avg: 0.011239ms
[simplejson] 0.44356 seconds for 100000 runs. avg: 0.004436ms
[     cjson] 0.09593 seconds for 100000 runs. avg: 0.000959ms

Encoding: 10000 x {'m': [['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19]], 't': 3}
[      json] 7.76628 seconds for 10000 runs. avg: 0.776628ms
[simplejson] 0.51179 seconds for 10000 runs. avg: 0.051179ms
[     cjson] 0.44362 seconds for 10000 runs. avg: 0.044362ms

--------------------
   Decoding Tests
--------------------
Decoding: 100000 x {"m": "asdsasdqwqw", "t": 3}
[      json] 3.32861 seconds for 100000 runs. avg: 0.033286ms
[simplejson] 0.37164 seconds for 100000 runs. avg: 0.003716ms
[     cjson] 0.03893 seconds for 100000 runs. avg: 0.000389ms

Decoding: 10000 x {"m": [["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19]], "t": 3}
[      json] 37.26270 seconds for 10000 runs. avg: 3.726270ms
[simplejson] 0.56643 seconds for 10000 runs. avg: 0.056643ms
[     cjson] 0.33007 seconds for 10000 runs. avg: 0.033007ms

6
โปรดเพิ่ม Pastie สำหรับโมดูลการทดสอบจริง
Tal Weiss

4
Python และ libs ที่เป็นปัญหารุ่นใด
Anentropic

6
นี่ไม่เป็นความจริงอีกต่อไป json ใน python2.7 เป็นการปรับปรุงประสิทธิภาพ
zengr

11

ค่าบางค่าจะถูกทำให้เป็นอนุกรมแตกต่างกันระหว่าง simplejson และ json

โดยเฉพาะอย่างยิ่งกรณีของcollections.namedtupleจะต่อเนื่องกันเป็นอาร์เรย์โดยแต่เป็นวัตถุjson simplejsonคุณสามารถลบล้างพฤติกรรมนี้ได้โดยส่งnamedtuple_as_object=Falseไปที่simplejson.dumpแต่โดยค่าเริ่มต้นพฤติกรรมไม่ตรงกัน

>>> import collections, simplejson, json
>>> TupleClass = collections.namedtuple("TupleClass", ("a", "b"))
>>> value = TupleClass(1, 2)
>>> json.dumps(value)
'[1, 2]'
>>> simplejson.dumps(value)
'{"a": 1, "b": 2}'
>>> simplejson.dumps(value, namedtuple_as_object=False)
'[1, 2]'

7

ความเข้ากันไม่ได้ของ API ที่ฉันพบด้วย Python 2.7 กับ simplejson 3.3.1 คือว่าเอาต์พุตสร้างวัตถุ str หรือ unicode เช่น

>>> from json import JSONDecoder
>>> jd = JSONDecoder()
>>> jd.decode("""{ "a":"b" }""")
{u'a': u'b'}

VS

>>> from simplejson import JSONDecoder
>>> jd = JSONDecoder()
>>> jd.decode("""{ "a":"b" }""")
{'a': 'b'}

หากการกำหนดค่าตามความชอบคือการใช้ simplejson ค่านี้สามารถแก้ไขได้โดยการบังคับใช้สตริงอาร์กิวเมนต์เป็น unicode ดังที่:

>>> from simplejson import JSONDecoder
>>> jd = JSONDecoder()
>>> jd.decode(unicode("""{ "a":"b" }""", "utf-8"))
{u'a': u'b'}

การบีบบังคับไม่จำเป็นต้องรู้ชุดอักขระดั้งเดิมตัวอย่างเช่น

>>> jd.decode(unicode("""{ "a": "ξηθννββωφρες" }"""))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 8: ordinal not in range(128)

นี่คือสิ่งที่จะไม่แก้ไขปัญหา 40


6

อีกเหตุผลหนึ่งที่โปรเจ็กต์ใช้ simplejson คือ builtin json ไม่ได้รวมการเพิ่มความเร็ว C ไว้ดังนั้นความแตกต่างด้านประสิทธิภาพจึงเห็นได้ชัดเจน


5

jsonโมดูลbuiltin ได้รวมอยู่ใน Python 2.6 โปรเจ็กต์ใด ๆ ที่สนับสนุนเวอร์ชันของ Python <2.6 จำเป็นต้องมีทางเลือกอื่น simplejsonในหลายกรณีที่เป็นทางเลือก


4

นี่คือการเปรียบเทียบไลบรารี Python json ที่ล้าสมัยแล้ว:

การเปรียบเทียบโมดูล JSON สำหรับ Python ( ลิงก์เก็บถาวร )

โดยไม่คำนึงถึงผลลัพธ์ในการเปรียบเทียบนี้คุณควรใช้ไลบรารีมาตรฐาน json หากคุณใช้ Python 2.6 และ .. ก็อาจใช้เพียงแค่ simplejson


2

โมดูล simplejson เร็วกว่า json เพียง 1.5 เท่า (บนคอมพิวเตอร์ของฉันกับ simplejson 2.1.1 และ Python 2.7 x86)

หากคุณต้องการคุณสามารถลองเปรียบเทียบ: http://abral.altervista.org/jsonpickle-bench.zip บนพีซีของฉัน simplejson เร็วกว่า cPickle ฉันต้องการทราบมาตรฐานของคุณด้วย!

อาจกล่าวได้ว่า Coady ความแตกต่างระหว่าง simplejson และ json คือ simplejson มี _speedups.c ดังนั้นทำไมนักพัฒนางูใหญ่ถึงไม่ใช้ Simplejson?


2

ใน python3 ถ้าคุณสตริงb'bytes'กับjsonคุณต้อง.decode()เนื้อหาก่อนที่คุณจะสามารถโหลด ดูแลนี้ดังนั้นคุณก็สามารถทำได้simplejsonsimplejson.loads(byte_string)


เปลี่ยนเป็นเวอร์ชั่น 3.6: s ในขณะนี้สามารถเป็นประเภทไบต์หรือ bytearray การเข้ารหัสอินพุตควรเป็น UTF-8, UTF-16 หรือ UTF-32
Mathieu Longtin

1

json ดูเหมือนจะเร็วกว่า simplejsonในทั้งสองกรณีของการโหลดและการทิ้งในเวอร์ชันล่าสุด

รุ่นทดสอบ:

  • หลาม: 3.6.8
  • json: 2.0.9
  • simplejson: 3.16.0

ผล:

>>> def test(obj, call, data, times):
...   s = datetime.now()
...   print("calling: ", call, " in ", obj, " ", times, " times") 
...   for _ in range(times):
...     r = getattr(obj, call)(data)
...   e = datetime.now()
...   print("total time: ", str(e-s))
...   return r

>>> test(json, "dumps", data, 10000)
calling:  dumps  in  <module 'json' from 'C:\\Users\\jophine.antony\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\json\\__init__.py'>   10000  times
total time:  0:00:00.054857

>>> test(simplejson, "dumps", data, 10000)
calling:  dumps  in  <module 'simplejson' from 'C:\\Users\\jophine.antony\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\simplejson\\__init__.py'>   10000  times
total time:  0:00:00.419895
'{"1": 100, "2": "acs", "3.5": 3.5567, "d": [1, "23"], "e": {"a": "A"}}'

>>> test(json, "loads", strdata, 1000)
calling:  loads  in  <module 'json' from 'C:\\Users\\jophine.antony\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\json\\__init__.py'>   1000  times
total time:  0:00:00.004985
{'1': 100, '2': 'acs', '3.5': 3.5567, 'd': [1, '23'], 'e': {'a': 'A'}}

>>> test(simplejson, "loads", strdata, 1000)
calling:  loads  in  <module 'simplejson' from 'C:\\Users\\jophine.antony\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\simplejson\\__init__.py'>   1000  times
total time:  0:00:00.040890
{'1': 100, '2': 'acs', '3.5': 3.5567, 'd': [1, '23'], 'e': {'a': 'A'}}

สำหรับรุ่น:

  • หลาม: 3.7.4
  • json: 2.0.9
  • simplejson: 3.17.0

json เร็วกว่า simplejson ในระหว่างการดำเนินการทิ้ง แต่ทั้งคู่รักษาความเร็วเดียวกันในระหว่างการดำเนินการโหลด


0

ฉันเจอคำถามนี้เมื่อฉันต้องการติดตั้ง simplejson สำหรับ Python 2.6 ฉันต้องการใช้ 'object_pairs_hook' ของ json.load () เพื่อโหลดไฟล์ json เป็น OrderedDict การคุ้นเคยกับ Python เวอร์ชันใหม่กว่าฉันไม่ทราบว่าโมดูล json สำหรับ Python 2.6 ไม่รวม 'object_pairs_hook' ดังนั้นฉันต้องติดตั้ง simplejson เพื่อจุดประสงค์นี้ จากประสบการณ์ส่วนตัวนี่คือเหตุผลที่ฉันใช้ simplejson ซึ่งตรงข้ามกับโมดูล json มาตรฐาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.