ความแตกต่างระหว่าง JSONObject และ JSONArray


101

หลังจากดู Google สั้น ๆ ฉันพบลิงก์นี้ซึ่งอธิบายความแตกต่าง แต่มาจากมุมมองของไวยากรณ์

เมื่อใดที่จะเป็นที่ต้องการมากกว่าอีกฝ่ายในสถานการณ์การเขียนโปรแกรม

คำตอบ:


190

เมื่อคุณทำงานกับข้อมูล JSON ใน Android คุณจะใช้JSONArrayเพื่อแยกวิเคราะห์ JSON ซึ่งเริ่มต้นด้วยวงเล็บอาร์เรย์ อาร์เรย์ใน JSON ใช้เพื่อจัดระเบียบคอลเล็กชันของรายการที่เกี่ยวข้อง (ซึ่งอาจเป็นออบเจ็กต์ JSON)
ตัวอย่างเช่น:[{"name":"item 1"},{"name": "item2} ]

ในทางกลับกันคุณจะใช้JSONObjectเมื่อจัดการกับ JSON ที่ขึ้นต้นด้วยวงเล็บปีกกา โดยทั่วไปออบเจ็กต์ JSON จะใช้เพื่อมีคู่คีย์ / ค่าที่เกี่ยวข้องกับรายการเดียว ตัวอย่างเช่น:{"name": "item1", "description":"a JSON object"}

แน่นอนอาร์เรย์ JSON และวัตถุอาจซ้อนกันอยู่ภายใน ตัวอย่างทั่วไปอย่างหนึ่งของสิ่งนี้คือ API ที่ส่งคืนออบเจ็กต์ JSON ที่มีข้อมูลเมตาบางส่วนควบคู่ไปกับอาร์เรย์ของรายการที่ตรงกับข้อความค้นหาของคุณ:

{"startIndex": 0, "data": [{"name":"item 1"},{"name": "item2"} ]}

5
{"startIndex": 0, [{"name": "item 1"}, {"name": "item2"}]} ไม่ใช่ทั้ง jsonbject หรือ jsonArray ที่ฉันแก้ไข
Sarath Sadasivan Pillai

104

ความแตกต่างจะเหมือนกับแผนที่ (แฮช) เทียบกับรายการ

JSONObject:

  • ประกอบด้วยค่าที่ตั้งชื่อ (คีย์ -> คู่ค่าสิ่งที่เพิ่มขึ้นหรือสิ่งที่คุณต้องการเรียกมัน)
    • ชอบ {ID : 1}
  • ลำดับองค์ประกอบไม่สำคัญ
    • JSONObject ของ{id: 1, name: 'B'}เท่ากับ{name: 'B', id: 1}.

JSONArray:

  • มีเฉพาะค่าชุดเท่านั้น
    • ชอบ [1, 'value']
  • ลำดับของค่าเป็นสิ่งสำคัญ
    • อาร์เรย์ของ[1,'value']ไม่เหมือนกับ['value',1]

ตัวอย่าง

JSON Object --> { "":""}

JSON Array --> [ , , , ]

{"employees":[
    {"firstName":"John", "lastName":"Doe"},
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
]}

4
นี่คือคำตอบที่น่าสนใจที่สุดของกลุ่ม
ไดนามิก

24

ความเข้าใจทางโปรแกรมที่ดีที่สุด

เมื่อไวยากรณ์เป็น{}แล้วนี่คือJsonObject

เมื่อไวยากรณ์เป็น[]แล้วนี่คือJsonArray

A JSONObjectเป็นออบเจ็กต์คล้าย JSON ที่สามารถแสดงเป็นองค์ประกอบในไฟล์JSONArray. JSONArrayสามารถมี (หรือหลายตัว)JSONObject

หวังว่านี่จะเป็นประโยชน์กับคุณ!


7

ฉันใช้ออบเจ็กต์เสมอมันขยายได้ง่ายกว่าอาร์เรย์ JSON ไม่ใช่ ตัวอย่างเช่นเดิมทีคุณมีข้อมูลบางส่วนเป็นอาร์เรย์ json จากนั้นคุณต้องเพิ่มส่วนหัวสถานะคุณจะติดขัดเล็กน้อยเว้นแต่คุณจะซ้อนข้อมูลไว้ในวัตถุ ข้อเสียเพียงอย่างเดียวคือความซับซ้อนของการสร้าง / การแยกวิเคราะห์ที่เพิ่มขึ้นเล็กน้อย

ดังนั้นแทนที่จะเป็น

[datum0, datum1, datumN]

คุณจะมี

{data: [datum0, datum1, datumN]}

หลังจากนั้นคุณสามารถเพิ่มได้อีก ...

{status: "foo", data: [datum0, datum1, datumN]}

6

เพื่อให้เข้าใจได้ง่ายขึ้นความแตกต่างระหว่างออบเจ็กต์ JSON และอาร์เรย์ JSON มีดังนี้

ลิงก์ไปยัง Tabular Difference: https://i.stack.imgur.com/GIqI9.png

อาร์เรย์ JSON

1. Arrays in JSON are used to organize a collection of related items
   (Which could be JSON objects)
2.  Array values must be of type string, number, object, array, boolean or null
3.  Syntax: 
           [ "Ford", "BMW", "Fiat" ]
4.  JSON arrays are surrounded by square brackets []. 
    **Tip to remember**  :  Here, order of element is important. That means you have 
    to go straight like the shape of the bracket i.e. straight lines. 
   (Note :It is just my logic to remember the shape of both.) 
5.  Order of elements is important. Example:  ["Ford","BMW","Fiat"] is not 
    equal to ["Fiat","BMW","Ford"]
6.  JSON can store nested Arrays that are passed as a value.

วัตถุ JSON

1.  JSON objects are written in key/value pairs.
2.  Keys must be strings, and values must be a valid JSON data type (string, number, 
    object, array, boolean or null).Keys and values are separated by a colon.
    Each key/value pair is separated by a comma.
3.  Syntax:
         { "name":"Somya", "age":25, "car":null }
4.  JSON objects are surrounded by curly braces {} 
    Tip to remember : Here, order of element is not important. That means you can go 
    the way you like. Therefore the shape of the braces i.e. wavy. 
    (Note : It is just my logic to remember the shape of both.)
5.  Order of elements is not important. 
    Example:  { rollno: 1, firstname: 'Somya'} 
                   is equal to 
             { firstname: 'Somya', rollno: 1}
6.  JSON can store nested objects in JSON format in addition to nested arrays.

ภายใต้ # 5 ในอาร์เรย์ JSON ตัวอย่างนั้นควรอยู่ในวงเล็บเหลี่ยมหรือไม่?
Mike Maxwell

ตัวอย่างนั้นเป็นเพียงการอธิบายแนวคิด แม้ว่าฉันจะเปลี่ยนตัวอย่างเพื่อความเข้าใจที่ดีขึ้น ขอบคุณที่ถาม @MikeMaxwell คำถามเช่นคุณช่วยพัฒนาทักษะการอธิบายของเรา
SAM

1

เมื่อ JSON เริ่มต้นด้วย {} จะเป็น Object JSON และเมื่อเริ่มต้นด้วย [] จะเป็น Array JOSN Array

อาร์เรย์ JSON สามารถประกอบด้วย / หลายวัตถุและเรียกว่าอาร์เรย์ของวัตถุ


0

ฉันรู้ว่าคำตอบก่อนหน้านี้ทั้งหมดเป็นข้อมูลเชิงลึกสำหรับคำถามของคุณ ฉันชอบคุณมากเกินไปความสับสนนี้เพียงหนึ่งนาทีก่อนที่จะพบกระทู้ SO หลังจากอ่านคำตอบบางส่วนนี่คือสิ่งที่ฉันได้รับ: JSONObject เป็นวัตถุคล้าย JSON ที่สามารถแสดงเป็นองค์ประกอบในอาร์เรย์ JSONArray กล่าวอีกนัยหนึ่ง JSONArray สามารถมี JSONObject (หรือหลายอัน)


0

การใช้งานทั้งสองอย่างขึ้นอยู่กับโครงสร้างของข้อมูลของคุณ

คุณสามารถใช้วิธีการซ้อนวัตถุได้หากคุณวางแผนที่จะให้ความสำคัญกับตัวระบุที่ไม่ซ้ำกันเช่นคีย์หลัก

เช่น:

  {
     "Employees" : {
           "001" : {
               "Name" : "Alan",
               "Children" : ["Walker", "Dua", "Lipa"]
                },
           "002" : {
               "Name" : "Ezio",
               "Children" : ["Kenvey", "Connor", "Edward"]
                }
      }

หรือใช้แนวทางแรกของ Arrayหากคุณต้องการจัดเก็บชุดของค่าโดยไม่จำเป็นต้องระบุไม่ซ้ำกัน

เช่น:

 [
     {
        "Employees":[
               {
                   "Name" : "Alan",
                   "Children" : ["Walker", "Dua", "Lipa"]
               },
               {
                   "Name" : "Ezio",
                   "Children" : ["Kenvey", "Connor", "Edward"]
               }
          ]
       }
   ]

แม้ว่าคุณจะสามารถใช้วิธีที่สองกับตัวระบุได้ แต่การสืบค้นและทำความเข้าใจในบางสถานการณ์อาจทำได้ยากหรือซับซ้อนเกินไป ขึ้นอยู่กับฐานข้อมูลอาจต้องใช้แนวทางที่เหมาะสม เช่นMongoDB / Firebase

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