4
votes

I have a JSON file as follows. I want to import it as pandas dataframe. My data was exported from MySQL workbench.

[
  {
    "id" : 1,
    "reviewer_id" : 5,
    "reviewed_date" : "2010-07-25 21:47:40",
    "description" : "วันนี้  ผมพาท่านผู้อ่านมาลิ้มลองสเต๊กราคาย่อมเยาว์ แถวย่านพัฒนาการกันนะครับ\r\nร้าน Bkk Steak ที่พัฒนาการ 61 นี้ เปิดเมื่อปี 2551 ตอนนั้นยังเป็นห้องแถวห้องเดียว ไม่มีแอร์ด้วย จำได้ว่าที่ผมไปกินครั้งแรก ร้านบอกว่าเปิดถึงเที่ยงคืน!  (จะว่าไปก็ การกินของหนักๆ อย่างสเต๊กในเวลาดึกดื่นขนาดนี้ ไม่เป็นผลดีต่อสุขภาพแน่ๆ)  หลังๆ จึงร่นระยะเวลามาเปิดถึง 4 ทุ่มครึ่งแทน (ก็ยังดึกอยู่ดี) ด้วยรสชาติอาหารที่ดี ในราคาที่ถือว่าคุ้มค่ามาก (เริ่มต้นที่ 69 บาท) ทำให้มีลูกค้ามาทานอย่างต่อเนื่อง และภายในเวลาไม่ถึงปี ร้าน Bkk Steak ก็ย้ายจากห้องแถวเดิม ไปเปิดใหม่เป็นห้องแถว 2 คูหาฝั่งตรงข้ามแทน\r\n\r\nโฉมใหม่ของ Bkk Steak คือร้าน 2 คูหา ติดแอร์ แต่งร้านแบบเรียบง่าย ดูโปร่งและสะอาดตา รอบๆ ร้านมีภาพของสเต๊กเมนูต่างๆ พนักงานต้อนรับส่วนใหญ่เป็นผู้ชายครับ\r\n\r\nรายการอาหารในเมนูมีภาพประกอบเกือบทั้งหมด เริ่มต้นจากออเดิร์ฟเช่น ซุปครีมเห็ด (25 บาท)  กุ้งทอดสอดไส้ชีส (59 บาท) และสลัดทูน่า (49 บาท)  ส่วนพระเอกที่เป็นสเต๊กนั้นก็มีตั้งแต่สเต๊กหมูพริกไทยดำ  สเต๊กไก่สไปซี่ (ราคา 69 บาททั้งคู่)  ฟิชแอนด์ชิพส์  สเต๊กปลาดอลลี่ (79 บาท) ไปจนถึงจานที่ราคาแพงสุดของร้านคือ Steak T-Bone (589 บาท)  และแน่นอน ทางร้านมี combo set สเต๊ก 2 ชิ้นราคา 109/119 บาท หรือแบบ 4 ชิ้นในราคา 209/219 บาท ครับ \r\n\r\nผมสั่งเสต๊กไก่สไปซี่ อาหารจานโปรดของผม เพราะร้านเข้าให้ไก่ชิ้นใหญ่ดี ไก่หมักออกมกำลังดี รสชาติก็ไม่ถึงกับจัดจ้านมาก (คงต้องเผื่อไว้สำหรับคนกินเผ็ดมากไม่ได้) แต่กลิ่นที่หอมฉุยและเนื้อไก่นุ่มๆ นี่แหละที่ผมติดใจนัก  มีขนมปังอบเนย สลัดหย่อมเล็กๆ และเฟร้นช์ฟรายเป็นเครื่องเคียง ปิดท้ายด้วยเป๊บซี่เย็นๆ อีกหนึ่งแก้วก็อิ่มอร่อยไปอย่างสบายกระเป๋าครับ\r\n\r\nเยี่ยมร้านเมื่อ จันทร์ที่ 19 ก.ค. 2553  19.20 น.\r\nจำนวนแขก\t30 คน  (50% ของ capacity)\r\nจำนวนพนักงานเสิร์ฟ 5 คน\t\r\nเวลาที่ใช้รออาหารจานแรก 11 นาที\r\nอาหารที่สั่ง สเต๊กไก่สไปซี่ + โค้ก\r\nจ่ายไป 90 บาท\r\n\r\nจุดขาย ราคาและการบริการ\r\n\r\nหนึ่งเรื่องประทับใจ\tเวลาแขกผลักประตูเข้ามาในร้าน พนักงานทุกคนจะกล่าวสวัสดีทักทายแขกว่า “หวัดดีค้าบ ขอเชิญค้าบ” ได้อารมณ์คล้ายๆ กับ 7-11 เลยทีเดียว\t\r\n\r\nหนึ่งเรื่องที่อยากให้เปลี่ยน\tถ้าร้านให้เฟรนช์ฟรายเยอะกว่านี้จะดีมาก (อาจจะเป็น option พิเศษเพิ่มเงิน 10 บาทอะไรอย่างนี้น่ะครับ)\r\n\r\n",
    "rating" : 4
  },
  { 
    "id" : 2,
    "reviewer_id" : 5,
    "reviewed_date" : "2010-07-31 15:00:26",
    "description" : "ร้านคิวซังราเมน เป็นร้านขายราเมนญี่ปุ่นที่ถุกที่สุดที่ผมเคยได้ไปเยี่ยมเยือนครับ\r\n\r\nการเดินทางก็ค่อนข้างสะดวก เข้าซอยพัฒนาการ 61 มาประมาณ 50 เมตรก่อนถึงป้อมยามก็จะเจอร้านคิวซังอยู่ด้านซ้ายมือ\r\n\r\nภายในร้านตกแต่งเรียบง่าย จุแขกได้ประมาณ 30 คน แอร์เย็นฉ่ำดี\r\n\r\nอาหารจานโปรดของผมก็คือ คิวซังราเมน ชื่อเดียวกับร้านนั่นเอง ราคา 59 บาท ทีเด็ดของคิวซังราเมน คือน้ำซุปที่รสชาติกลมกล่อมเอามากๆ ไม่ต้องปรุงอะไรก็อร่อยทานได้ทันที แต่ถ้าชอบรสเผ็ดๆ หน่อยอย่างผมก็ใส่พริกป่นไปซักหนึ่งช้อนชาก็เรียบร้อยพร้อมทาน\r\n\r\nเคยไปกินราเมนร้านอื่น ชามเหยียบสองร้อย ผมว่ารสชาติก็สู้คิวซังราเมนไม่ได้ (หรือว่าลิ้นผมมันไม่ไฮโซพอหว่า)\r\n\r\nยังไง ถ้าอยากได้ทานราเมนเงียบๆ ราคาสบายกระเป๋า ก็มาลิ้มลองได้เลยครับ มีเมนู ราเมนร่วมสิบกว่าเมนู แล้วก็มีอาหารทานเล่นพวกเกี๋ยวซ่า ไก่คาราเกะ ยำสาหร่ายซึ่งรสชาติก็สอบผ่านทุกจานอยู่แล้วครับ\r\n",
    "rating" : 4
  }
]

Note: Texts in description field are Thai language.

I have run following code.

data = pd.read_json("data/review.json",encoding="utf-8")

Output: "ValueError: Expected object or value"

data = pd.read_json("data/review.json",encoding="utf-8",orient='records',lines=True)

Output: "ValueError: Expected object or value"

pd.read_json("data/review.json",encoding="utf-8",lines=True,chucksize=1000)

Output: TypeError: read_json() got an unexpected keyword argument 'chucksize' "

with open('data/review.json',encoding="utf8") as f:
     data = json.loads(f.read())
     data = pd.DataFrame(data)

Output: "JSONDecodeError: Invalid control character at: line 2110232 column 206"

with open('data/review.json',encoding="utf8") as f:
     data = json.loads(f.read(),strict=False)
     data = pd.DataFrame(data)

Output: "JSONDecodeError: Expecting value: line 16591251 column 1 (char 544624441)"

How to import this JSON into pandas?

Note: My pandas version is 0.23.0.

References:

1
Sorry, but this works on my machine with the two records provided. You must have malformed JSON somewhere else. Copy paste your data into jsonlint.com and see where the problem is.cs95
Thanks for your advice. I found some users used quotation marks (") in the description field (i.stack.imgur.com/pwqqu.png). What file format should I export? I used to export data into csv format but there are some users who used commas (,) in the description field.user9920003
Your JSON is malformed. I have no idea how to help you. If the file was JSON lines, you could've salvaged something, but this is the absolute worst. Please give a kick to whoever you got this crappy data from.cs95

1 Answers

0
votes

Try this. This worked for me.

import pandas as pd
# Load the first sheet of the JSON file into a data frame
data_df = pd.read_json('reviewsclean.json', lines=True)