แปลงอาร์เรย์เป็น JSON


383

ฉันมีอาร์เรย์var cars = [2,3,..]ที่มีจำนวนเต็มไม่กี่ ฉันได้เพิ่มค่าบางอย่างลงในอาร์เรย์ แต่ตอนนี้ฉันต้องส่งอาร์เรย์นี้ไปยังหน้าเว็บด้วย.getวิธีการของ jQuery ฉันจะแปลงเป็นวัตถุ JSON เพื่อส่งได้อย่างไร


เพียงตรวจสอบอีกครั้ง: เป็นอาร์เรย์ที่คุณต้องการส่งไปยังหน้าเว็บเป็นอาร์เรย์ JavaScript หรืออยู่บนเซิร์ฟเวอร์หรือไม่
Ian Oxley

เป็นอาร์เรย์ Javascript ฉันจะส่งไปที่สคริปต์ Python และ Python จะใช้สตริง JSON และทำงานกับมัน
dotty

คำตอบ:


657

สคริปต์สำหรับความเข้ากันได้แบบย้อนหลัง: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

และโทร:

var myJsonString = JSON.stringify(yourArray);

หมายเหตุ: ตอนนี้วัตถุ JSON เป็นส่วนหนึ่งของเว็บเบราว์เซอร์ที่ทันสมัยที่สุด (IE 8 & สูงกว่า) ดูcaniuseสำหรับรายชื่อเต็ม เครดิตไปที่: @ Spudley สำหรับความคิดเห็นของเขาด้านล่าง


5
ใช้ได้ผล jQuery มีฟังก์ชั่นเช่นนี้หรือไม่? ฉันไม่ต้องการแนบไฟล์ js อื่นหาก jQuery มีฟังก์ชั่นอยู่แล้ว
dotty

1
jQuery มีการใช้งาน JSON.parse ใน 1.4.1 แต่ไม่ใช่ JSON.stringify ... หากคุณ minifiy json2.js <3k ฉันคิดว่า
แคระ

6
ใช่ฉันรู้สึกประหลาดใจที่ jQuery ไม่ได้สร้างสิ่งนี้ด้วย
JonoW

120
สำหรับทุกคนที่ยังคงอ่านคำตอบนี้มีค่าชี้ให้เห็นว่าเบราว์เซอร์ที่ทันสมัยทั้งหมดรวมJSONวัตถุเป็นมาตรฐานซึ่งหมายความว่าคุณไม่จำเป็นต้องใช้สคริปต์นี้เว้นแต่ว่าคุณวางแผนที่จะสนับสนุนเบราว์เซอร์รุ่นเก่าเช่น IE7 หรือ Firefox 3.0 ดูCanIUseสำหรับแผนภูมิการสนับสนุน
Spudley

1
เป็นมูลค่าที่คุณสามารถทำได้ในคอนโซลของเบราว์เซอร์: var a = [paste]; JSON.stringify (a)
Michael Cole

70

ฉันทำอย่างนั้น:

ถ้าฉันมี:

var jsonArg1 = new Object();
    jsonArg1.name = 'calc this';
    jsonArg1.value = 3.1415;
var jsonArg2 = new Object();
    jsonArg2.name = 'calc this again';
    jsonArg2.value = 2.73;

var pluginArrayArg = new Array();
    pluginArrayArg.push(jsonArg1);
    pluginArrayArg.push(jsonArg2);

เพื่อแปลง pluginArrayArg (ซึ่งเป็นอาร์เรย์ javascript บริสุทธิ์) ไปเป็นอาร์เรย์ JSON:

var jsonArray = JSON.parse(JSON.stringify(pluginArrayArg))

1
คุณช่วยชีวิตฉันไว้
นพ. Shafayatul Haque

44

ว้าวดูเหมือนว่าทุกวันนี้จะง่ายขึ้นมาก ... 3 วิธีที่ทำได้:

json = { ...array };

json = Object.assign({}, array);

json = array.reduce((json, value, key) => { json[key] = value; return json; }, {});

2
jsonString = JSON.stringify({ ...array })
กฤษณะแรงบิด

11

ฉันตัดสินใจใช้ไลบรารี json2 และฉันพบข้อผิดพลาดเกี่ยวกับ "โครงสร้างข้อมูลแบบวนซ้ำ"

ฉันได้รับการแก้ไขโดยบอก json2 วิธีแปลงวัตถุที่ซับซ้อนของฉัน ไม่เพียงทำงานได้ในขณะนี้ แต่ยังรวมเฉพาะฟิลด์ที่ฉันต้องการด้วย นี่คือวิธีที่ฉันทำ:

OBJ.prototype.toJSON = function (key) {
       var returnObj = new Object();
       returnObj.devid = this.devid;
       returnObj.name = this.name;
       returnObj.speed = this.speed;
       returnObj.status = this.status;
       return returnObj;
   }

11

หรือลองกำหนดอาเรย์เป็นวัตถุ (var cars = {};) จากนั้นไม่จำเป็นต้องแปลงเป็น json นี่อาจไม่เป็นจริงในตัวอย่างของคุณ แต่ใช้ได้ดีสำหรับฉัน



1

หากคุณมีเพียงวัตถุเดียวเช่นวัตถุที่คุณถามสิ่งต่อไปนี้จะใช้งานได้

var x = [{'a':'b'}];
var b= JSON.stringify(x);
var c = b.substring(1,b.length-1);
JSON.parse(c); 

1

วิธีที่สั้นที่สุดที่ฉันรู้ในการสร้าง json ที่ถูกต้องจากอาร์เรย์ของจำนวนเต็มคือ

let json = `[${cars}]`

สำหรับวัตถุ / อาร์เรย์ทั่วไปเพิ่มเติม (ไม่มีการอ้างอิงแบบวงกลม ) ให้ใช้ JSON.stringify (cars)


1

เพราะอาร์เรย์ของฉันเป็นเหมือนด้านล่าง: และฉันใช้ฟังก์ชัน. push เพื่อสร้างแบบไดนามิก

my_array = ["234", "23423"];

วิธีเดียวที่ฉันแปลงอาร์เรย์เป็น json คือ

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