Chuyển đổi một chuỗi thành đối tượng JSON


148

Làm thế nào để bạn làm cho JS nghĩ rằng một chuỗi là JSON?

Tôi có một hàm chỉ hoạt động nếu đối tượng JSON được truyền cho nó. Nếu tôi chuyển một chuỗi cho nó, với cùng định dạng như JSON, thì nó không hoạt động. Vì vậy, tôi muốn làm cho hàm đó nghĩ rằng chuỗi được truyền cho nó là một JSON. Chuỗi này thực sự ở định dạng JSON.

Tôi cũng đã thử như sau. Tôi đã nhập chuỗi thông qua Ajax, với tham số "xử lý như" là "JSON" và sau đó khi tôi chuyển kết quả cho hàm thì nó hoạt động.

Vì vậy, tôi đã suy luận vấn đề không phải là với chuỗi. Làm cách nào để chuyển đổi chuỗi này thành JSON? Nếu tôi nhận được cùng một chuỗi thông qua yêu cầu ajax và sau đó chuyển nó đến chức năng hoạt động, trong khi trực tiếp chuyển nó không hoạt động.

Chuỗi như sau:

  {
     "data": [
   {
  "id": "id1",
      "fields": [
        {
          "id": "name1",
          "label": "joker",
          "unit": "year"
        },
         {"id": "name2", "label": "Quantity"},
    ],
      "rows": [    data here....

and closing braces..


2
Tiêu đề của bạn là sai lệch. Dựa trên nội dung câu hỏi của bạn, tôi muốn nói rằng bạn muốn chuyển đổi một chuỗi chứa JSON thành một đối tượng / mảng JavaScript.
Felix Kling

OK tôi đã giải quyết nó. Có một \ n trong chuỗi. Bây giờ chỉ phải tìm ra cách sử dụng JSON.parse với điều này.
Zer0

Ok tôi đã sửa nó. Goto jsonlint.com và đặt chuỗi của bạn ở đó. Nếu nó nói chính xác, thì bạn có thể sử dụng JSONPude để đạt được điều tương tự.
Zer0

Trong trường hợp bất cứ ai đọc được điều này, tiêu đề được cho là "chuyển đổi một chuỗi JSON thành một đối tượng"
Chris G

Câu trả lời:


353
var obj = JSON.parse(string);

stringChuỗi json của bạn ở đâu


Đây không phải là làm việc. Nó đang đưa ra một lỗi "SyntaxError: JSON.parse: nhân vật bất ngờ". Không có gì sai với chuỗi như khi tôi nhận được cùng một chuỗi thông qua yêu cầu ajax và xử lý nó như "JSON", không có vấn đề gì xảy ra.
Zer0

vui lòng gửi chuỗi JSON thông minh của bạn
Kshitij

{"data": [{id ": - bạn đang thiếu một trích dẫn kép ở đây, tức là bắt đầu trích dẫn kép của id
Kshitij

2
Khi tôi lấy nó thông qua Ajax, nó hoạt động như sau đó nó xử lý phản hồi dưới dạng JSON. Vì vậy, tôi nghĩ rằng tôi phải chuyển đổi nó thành một đối tượng JSON ..
Zer0

2
Cuối cùng tôi đã truy cập jsonlint.com và chắc chắn rằng Json của tôi đúng
Zer0

26

Bạn có thể dùng JSON.parse() cho điều đó.

Xem tài liệu tại MDN

Thí dụ:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);

1
Đây không phải là làm việc. Nó đang đưa ra một lỗi "SyntaxError: JSON.parse: nhân vật bất ngờ". Không có gì sai với chuỗi như khi tôi nhận được cùng một chuỗi thông qua yêu cầu ajax và xử lý nó như "JSON", không có vấn đề gì xảy ra.
Zer0

2
@ Zer0: Bạn nên cập nhật câu hỏi của mình với cách bạn đang thử nó cùng với chuỗi json của bạn.
Sarfraz

4
@ Zer0: Chúng tôi chỉ có thể trả lời những kiến ​​thức tốt nhất của chúng tôi. Bạn nói rằng bạn có một chuỗi JSON, chúng tôi trả lời tương ứng. Có vẻ như chuỗi của bạn là khác nhau, nếu bạn đăng nó, chúng tôi có thể trả lời có tính đến điều này. Nếu bạn hỏi một câu hỏi về mã hóa, thì mã / dữ liệu là không thể thiếu.
Felix Kling

7

Tôi đã có cùng một vấn đề với một chuỗi tương tự như của bạn

{id:1,field1:"someField"},{id:2,field1:"someOtherField"}

Vấn đề ở đây là cấu trúc của chuỗi. Trình phân tích cú pháp json không nhận ra rằng nó cần tạo 2 đối tượng trong trường hợp này. Vì vậy, những gì tôi đã làm là ngớ ngẩn, tôi chỉ cấu trúc lại chuỗi của mình và thêm vào đó []với trình phân tích cú pháp được công nhận

var myString = {id:1,field1:"someField"},{id:2,field1:"someOtherField"}
myString = '[' + myString +']'
var json = $.parseJSON(myString)

Hy vọng nó giúp,

Nếu ai có cách tiếp cận thanh lịch hơn xin hãy chia sẻ.


Trong mã của bạn ở trên, bạn đã xây dựng myStringkhông chính xác. Đây không phải là một chuỗi và nó được định dạng không chính xác JSON. Dòng thứ hai của bạn sau đó sẽ trở nên dư thừa. Đây là những gì nó phải là: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' Tôi biết đây là một bài viết cũ, nhưng tôi nghĩ tôi sẽ thêm một chút rõ ràng trong trường hợp bất cứ ai tìm thấy nó.
James Eberhardt

Tôi đã giải quyết vấn đề của mình bằng cách sử dụng $.parseJSONkhi JSON.parsekhông hoạt động và gây ra lỗiJSON.parse is not a function
brasofilo


3

chuyển đổi chuỗi thành HashMap bằng Object Mapper ...

new ObjectMapper().readValue(string, Map.class);

Bản đồ bên trong sẽ hoạt động như đối tượng JSON


2
var Data=[{"id": "name2", "label": "Quantity"}]

Truyền biến chuỗi vào phân tích Json:

Objdata= Json.parse(Data);

Trong ví dụ của bạn, Datađã là một đối tượng, vì vậy sẽ không cần phải phân tích cú pháp. Bạn sẽ cần một số trích dẫn xung quanh tất cả Dữ liệu của bạn để biến nó thành một chuỗi.
James Eberhardt

2

Đơn giản chỉ cần sử dụng evalchức năng.

var myJson = eval(theJsibStr);

eval là xấu xa, hãy cẩn thận với an ninh với phương pháp này
dparker 26/03/19

0

JSON.parse() chức năng sẽ làm.

hoặc là

Sử dụng Jquery,

var obj = jQuery.parseJSON( '{ "name": "Vinod" }' );
alert( obj.name === "Vinod" );

0

Hãy để chúng tôi xem xét bạn có chuỗi như

ví dụ: "tên: lucy, tuổi: 21, giới tính: nữ"

function getJsonData(query){
    let arrayOfKeyValues = query.split(',');
    let modifiedArray =  new Array();
    console.log(arrayOfKeyValues);
    for(let i=0;i< arrayOfKeyValues.length;i++){
        let arrayValues = arrayOfKeyValues[i].split(':');
        let arrayString ='"'+arrayValues[0]+'"'+':'+'"'+arrayValues[1]+'"';
        modifiedArray.push(arrayString);
    }
    let jsonDataString = '{'+modifiedArray.toString()+'}';
    let jsonData = JSON.parse(jsonDataString);
    console.log(jsonData);
    console.log(typeof jsonData);
    return jsonData;
}

let query = "name:lucy,age:21,gender:female";
let response = getJsonData(query);
console.log(response);

`

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.