การอ่านไฟล์ json ใน Android [ปิด]


84

ฉันมีไฟล์ json ต่อไปนี้ ฉันต้องการทราบว่าฉันควรวางไฟล์ json ไว้ที่ใดในโครงการของฉันและจะอ่านและจัดเก็บได้อย่างไร

{
"aakash": [
    [  0.070020,0.400684],
    [  0.134198,0.515837],
    [  0.393489,0.731809],
    [  0.281616,0.739490]

],
"anuj": [
    [  1287.836667,-22.104523],
    [  -22.104523,308.689613],
    [  775.712801,-13.047385],
    [  -13.047385,200.067743]
]
}

3
ก่อนโพสต์คำถามที่นี่คุณต้อง googling มีตัวอย่างมากมายในเน็ต
Chirag

2
@ChiragRaval ฉันเห็นด้วย แต่ฉันจะวางไฟล์ json เพื่ออ่านจากไฟล์ได้ที่ไหน?
Aakash Anuj

หากคุณมีไฟล์ json แบบคงที่คุณสามารถวางไว้ในสินทรัพย์และโฟลเดอร์ดิบในโครงการของคุณได้ แต่ถ้าคุณกำลังสร้างไฟล์ json แบบไดนามิกให้สร้างไฟล์ใน
SDCARD

2
@AakashAnuj: ดูคำตอบของ Faizan และวางไฟล์ไว้ในโฟลเดอร์
assets

16
ไม่รู้ว่าทำไมถึงปิด คำถามดูเหมือนชัดเจนและแม่นยำสำหรับฉัน 1) ไฟล์ข้อมูล json เก็บไว้ที่ไหนเมื่อพัฒนาแอพ Android 2) ฉันจะอ่านข้อมูลนั้นได้อย่างไร แน่นอนว่านี่อาจแบ่งออกเป็นสองคำถาม แต่คำถามทั้งสองมีความเกี่ยวข้องกันมาก (คุณจะไม่ใช้คำถามหนึ่งโดยไม่มีคำถามอื่น) คำถามหนึ่งอาจถามทั้งสองอย่างซึ่ง AakashAnuj ทำ นอกจากนี้ @Faizan ยังตอบคำถามได้ดีเยี่ยมซึ่งทำให้การร้องเรียน "ไม่สามารถแก้ไขได้" เป็นโมฆะ คำตัดสิน? คำถามที่ถูกต้อง
SMBiggs

คำตอบ:


212

ใส่แฟ้มที่อยู่ในสินทรัพย์

สำหรับโปรเจ็กต์ที่สร้างในโปรเจ็กต์ Android Studio คุณต้องสร้างโฟลเดอร์ assets ภายใต้โฟลเดอร์หลัก

อ่านไฟล์นั้นเป็น:

public String loadJSONFromAsset(Context context) {
        String json = null;
        try {
            InputStream is = context.getAssets().open("file_name.json");

            int size = is.available();

            byte[] buffer = new byte[size];

            is.read(buffer);

            is.close();

            json = new String(buffer, "UTF-8");


        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
        return json;

    }

จากนั้นคุณสามารถอ่านstringผลตอบแทนนี้โดยใช้ฟังก์ชันนี้เป็น

JSONObject obj = new JSONObject(json_return_by_the_function);

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ JSON โปรดดูที่ http://www.vogella.com/articles/AndroidJSON/article.html

หวังว่าคุณจะได้รับสิ่งที่คุณต้องการ


3
จะเป็นอย่างไรถ้าขนาดไฟล์เกือบ 6 ถึง 7 MB? หากเก็บไฟล์ไว้ในสตริงมันจะแสดงข้อยกเว้น (หน่วยความจำไม่เพียงพอ) มีวิธีใดบ้างในการดึงข้อมูล jsonObject เพียงครั้งเดียวจากไฟล์ JsonArray
Hiren Dabhi

ฉันจะอ่านไฟล์ JSON จากเว็บลิงค์ได้อย่างไร
Si8

7
สำหรับโครงการที่สร้างขึ้นในสตูดิโอโครงการ Android คุณจำเป็นต้องสร้างโฟลเดอร์สินทรัพย์ภายใต้โฟลเดอร์หลักสิ่งที่เป็นasset folderและmain folder?
Hirdesh Vishwdewa

3
การจัดสรรบัฟเฟอร์ตามผลลัพธ์ที่ส่งคืนโดย available () ไม่ถูกต้องตามเอกสาร Java: docs.oracle.com/javase/7/docs/api/java/io/… "โปรดทราบว่าในขณะที่การใช้งาน InputStream บางส่วนจะส่งคืนค่า จำนวนไบต์ทั้งหมดในสตรีมซึ่งจะไม่เป็นจำนวนมากการใช้ค่าส่งคืนของวิธีนี้ไม่ถูกต้องเพื่อจัดสรรบัฟเฟอร์ที่มีไว้เพื่อเก็บข้อมูลทั้งหมดในสตรีมนี้
Andrew

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