เรียง JSON

จัดระเบียบคีย์ของ object JSON และสมาชิกในอาร์เรย์ให้ข้อมูลอ่านง่าย เทียบง่าย และเก็บในรูปแบบที่สม่ำเสมอมากขึ้น ทุกอย่างทำงานในเบราว์เซอร์ของคุณ

คำแนะนำที่เกี่ยวข้อง

การเรียง JSON คืออะไร?

การเรียง JSON คือการนำคีย์ใน object มาเรียงตามกฎลำดับที่กำหนด หรือเรียงสมาชิกในอาร์เรย์ตามค่า การทำงานนี้ไม่เปลี่ยนข้อมูลจริงหรือชนิดข้อมูล เปลี่ยนเพียงลำดับการแสดงผลเท่านั้น

การทำให้เป็นมาตรฐานแบบนี้ช่วยลด noise ใน Git Diff, ทำให้ไฟล์ config มีรูปแบบสม่ำเสมอ, เตรียมข้อมูลก่อนใช้ JSON Diff และทำให้ cache key ของ API เสถียรขึ้น JSON เดิมจะไม่ดูเหมือนเปลี่ยนแค่เพราะลำดับคีย์ไม่ตรงกัน

เครื่องมือของ GeekFormat รองรับ 2 โหมด คือเรียงคีย์และเรียงอาร์เรย์ พร้อมสลับเพิ่ม/ลดและเปิดปิด recursive ได้ ข้อมูลของคุณไม่ถูกส่งขึ้นเซิร์ฟเวอร์

กรณีการใช้งาน

  • ทำให้ลำดับคีย์ใน package.json, tsconfig.json และไฟล์ config อื่นๆ เป็นมาตรฐานเดียวกัน
  • เรียง JSON ทั้งสองฝั่งก่อนเปรียบเทียบเพื่อลดความต่างปลอมที่เกิดจากลำดับไม่เหมือนกัน
  • ทำให้ลำดับคีย์ใน API response คงที่สำหรับ cache, hash และ snapshot
  • จัดระเบียบไฟล์ JSON ขนาดใหญ่ก่อน code review หรือ audit config
  • เตรียมผลลัพธ์หลัง merge หรือ repair ก่อนเข้าสู่ขั้น validation ถัดไป

วิธีการใช้งาน

  1. วาง JSON ในแผงด้านซ้าย โหลดตัวอย่าง หรืออัปโหลดไฟล์ .json
  2. เลือกโหมดเรียงคีย์หรือเรียงอาร์เรย์ จากนั้นตั้งค่าทิศทางและ recursive
  3. กดปุ่มเรียงแล้วดูผลลัพธ์ทางด้านขวา
  4. คัดลอกผลลัพธ์หรือดาวน์โหลดเป็น sorted.json

คุณสมบัติ

  • สองโหมด: เรียงคีย์ของ object หรือเรียงสมาชิกในอาร์เรย์
  • รองรับ recursive: ปรับลำดับภายใน object ที่ซ้อนกันได้อัตโนมัติ
  • เพิ่มขึ้นและลดลง: เปลี่ยนทิศทางการเรียงได้ทันที
  • โครงสร้างไม่เสีย: ค่าและชนิดข้อมูลยังเหมือนเดิม
  • ประมวลผลในเครื่อง: JSON ไม่ถูกส่งไปยังเซิร์ฟเวอร์
  • ต่อยอดง่าย: นำผลลัพธ์ไปใช้กับ JSON Diff, Repair หรือ Format ต่อได้

ตัวอย่างโค้ด

เรียงคีย์แบบ recursive ด้วย JavaScript

javascript
// เรียงคีย์แบบ recursive และคืนค่าเป็น object ใหม่
function sortKeysDeep(value) {
  if (Array.isArray(value)) return value.map(sortKeysDeep);
  if (value !== null && typeof value === 'object') {
    return Object.keys(value)
      .sort((a, b) => a.localeCompare(b))
      .reduce((acc, k) => {
        acc[k] = sortKeysDeep(value[k]);
        return acc;
      }, {});
  }
  return value;
}

const data = { zoo: { animals: ['zebra', 'elephant'] }, alpha: 1, beta: 2 };
console.log(JSON.stringify(sortKeysDeep(data), null, 2));

ใช้ sort_keys=True ใน Python

python
import json

data = {"zoo": {"animals": ["zebra", "elephant"]}, "alpha": 1, "beta": 2}

print(json.dumps(data, indent=2, sort_keys=True, ensure_ascii=False))

arr = [3, 1, 4, 1, 5]
print(sorted(arr))
print(sorted(arr, reverse=True))

เรียง JSON ด้วย jq

bash
# เรียงคีย์แบบ recursive
jq -S '.' data.json

# เรียงสมาชิกในอาร์เรย์
jq 'sort' data.json

# เรียงตามฟิลด์ที่กำหนด
jq 'sort_by(.age)' data.json

คำถามที่พบบ่อย

การเรียง JSON ต่างจากการ format JSON อย่างไร?

การ format เปลี่ยนแค่การย่อหน้าและขึ้นบรรทัดใหม่ แต่การเรียง JSON จะเปลี่ยนลำดับคีย์และสมาชิกอาร์เรย์ ใช้ทั้งสองอย่างร่วมกันจะได้ JSON ที่อ่านง่ายและลำดับเป็นระเบียบ

หลังเรียงแล้ว JSON จะใหญ่ขึ้นไหม?

แทบไม่เปลี่ยน ข้อมูลยังเท่าเดิม มีเพียงลำดับของฟิลด์และสมาชิกที่เปลี่ยนไป

ค่าหรือชนิดข้อมูลจะเปลี่ยนหรือไม่?

ไม่เปลี่ยน `null`, ตัวเลข, สตริง, boolean, object และ array จะคงเดิมทุกอย่าง

recursive sort หมายถึงอะไร?

หมายถึงการเรียงไม่ใช่แค่ object ชั้นนอกสุด แต่รวมถึง object ทุกชั้นที่ซ้อนอยู่ข้างในด้วย สำหรับ config และ API response มักแนะนำให้เปิดไว้

ทำไมคีย์ที่ดูเหมือนเลขจำนวนเต็มถึงอยู่ข้างบนเสมอ?

JavaScript จัดการคีย์อย่าง `0`, `1`, `2` ตามลำดับตัวเลข นี่เป็นพฤติกรรมของแพลตฟอร์ม ไม่ใช่บั๊กของเครื่องมือ

object ภายใน array ถูกเรียงอย่างไร?

โหมด array ใช้การเปรียบเทียบแบบทั่วไปจากรูปแบบข้อความของสมาชิก ถ้าต้องเรียงตามฟิลด์เฉพาะ เช่น `price` หรือ `date` ควรใช้ `sort_by(.field)`

JSON จะถูกอัปโหลดขึ้นเซิร์ฟเวอร์หรือไม่?

ไม่ ทุกขั้นตอนเกิดขึ้นในเบราว์เซอร์ จึงเหมาะกับข้อมูลที่มีความอ่อนไหวด้วย

ถ้าจะใช้ร่วมกับ JSON Diff หรือ Schema ควรเรียงลำดับขั้นตอนอย่างไร?

โดยทั่วไปแนะนำ JSON Repair → เรียง JSON → JSON Diff / Format → ตรวจ Schema เพราะการเรียงก่อนจะช่วยลด noise ตอนเทียบ diff

การแก้ไขปัญหา

เจอข้อผิดพลาด Invalid JSON

JSON ที่ป้อนเข้ามาอาจมีไวยากรณ์ผิด ให้ตรวจด้วย JSON Repair หรือ JSON Format ก่อน

คีย์ที่ดูเหมือนเลขจะขึ้นบนสุดเสมอ

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

object ใน array ไม่เรียงตามที่ต้องการ

โหมด array ไม่เข้าใจความหมายของฟิลด์ธุรกิจและใช้การเปรียบเทียบทั่วไป หากต้องการเรียงตาม `price` หรือ `date` ให้ใช้ `sort_by`

object ที่ซ้อนกันไม่ได้ถูกเรียง

ตรวจสอบว่าเปิดตัวเลือก recursive อยู่หรือไม่ ถ้าปิดไว้จะเรียงเฉพาะชั้นบนสุดเท่านั้น

JSON ขนาดใหญ่มากทำให้เบราว์เซอร์ช้า

ไฟล์ใหญ่ควรประมวลผลล่วงหน้าด้วย `jq`, Python หรือ Node.js แล้วค่อยนำผลลัพธ์มาตรวจในเบราว์เซอร์

อภิธานศัพท์

JSON Sort
การเปลี่ยนเฉพาะลำดับของคีย์หรือสมาชิกอาร์เรย์ โดยไม่แก้ค่าและชนิดข้อมูล
Recursive Sort
การเรียงที่ไม่ทำแค่ชั้นบนสุด แต่ไล่เข้าไปยัง object ที่ซ้อนอยู่ทุกชั้น
Ascending / Descending
Ascending คือ A-Z หรือค่าน้อยไปมาก ส่วน Descending คือกลับกัน
Canonical Form
รูปแบบ JSON ที่ถูกทำให้เป็นมาตรฐาน เหมาะกับการเทียบ cache และสร้าง hash
Git Diff Noise
บรรทัด diff ที่เกินความจำเป็นซึ่งเกิดจากลำดับหรือรูปแบบ ไม่ใช่การเปลี่ยนข้อมูลจริง
localeCompare
API เปรียบเทียบสตริงของ JavaScript ที่มักใช้ช่วยเรียงชื่อคีย์ตามลำดับพจนานุกรม

สถานการณ์ที่มักต้องเรียง JSON

สถานการณ์เรียงตามวิธีที่แนะนำเครื่องมือ
ลด Git Diff noiseคีย์ของ objectเรียงคีย์แบบ recursiveเครื่องมือนี้ / jq -S
ทำ config ให้เป็นมาตรฐานคีย์ของ objectเพิ่มขึ้น + recursiveเครื่องมือนี้
ทำ cache key ของ API ให้คงที่คีย์ของ objectเรียงก่อน stringifyเครื่องมือนี้ / ตัวอย่างโค้ด
จัดข้อมูลในอาร์เรย์แบบเร็วสมาชิกอาร์เรย์โหมด arrayเครื่องมือนี้

เมื่อไรควรใช้ Sort, Diff หรือ Merge

เครื่องมือจุดประสงค์สิ่งที่จัดระเบียบขั้นถัดไป
เรียง JSONทำลำดับให้เหมือนกันคีย์ / อาร์เรย์Diff, format
JSON Diffเปรียบเทียบความต่างไม่มีควรใช้หลังเรียง
JSON Mergeรวมหลายแหล่งข้อมูลถ้าจำเป็นให้เรียงหลัง mergeเรียงต่อหลัง merge
JSON Repairซ่อม JSON ที่ไม่ถูกต้องไม่มีเรียงหลังซ่อม

Authoritative References