Phản hồi với một đối tượng JSON trong Node.js (chuyển đổi đối tượng / mảng thành chuỗi JSON)


98

Tôi là người mới làm quen với mã back-end và tôi đang cố gắng tạo một hàm sẽ phản hồi cho tôi một chuỗi JSON. Tôi hiện có cái này từ một ví dụ

function random(response) {
  console.log("Request handler 'random was called.");
  response.writeHead(200, {"Content-Type": "text/html"});

  response.write("random numbers that should come in the form of json");
  response.end();
}

Về cơ bản, điều này chỉ in ra chuỗi "các số ngẫu nhiên có dạng JSON". Những gì tôi muốn điều này làm là phản hồi với một chuỗi JSON gồm bất kỳ số nào. Tôi có cần đặt một loại nội dung khác không? hàm này có nên chuyển giá trị đó cho một hàm khác nói ở phía máy khách không?

Cảm ơn bạn đã giúp đỡ!


res.json ({"Khoá": "Giá trị"});
Amol M Kulkarni

Câu trả lời:


160

Sử dụng res.json với Express:

function random(response) {
  console.log("response.json sets the appropriate header and performs JSON.stringify");
  response.json({ 
    anObject: { item1: "item1val", item2: "item2val" }, 
    anArray: ["item1", "item2"], 
    another: "item"
  });
}

Ngoài ra:

function random(response) {
  console.log("Request handler random was called.");
  response.writeHead(200, {"Content-Type": "application/json"});
  var otherArray = ["item1", "item2"];
  var otherObject = { item1: "item1val", item2: "item2val" };
  var json = JSON.stringify({ 
    anObject: otherObject, 
    anArray: otherArray, 
    another: "item"
  });
  response.end(json);
}

76
var objToJson = { };
objToJson.response = response;
response.write(JSON.stringify(objToJson));

Nếu alert(JSON.stringify(objToJson))bạn sẽ nhận được{"response":"value"}


Lưu ý rằng res.write (JSON.stringify ()) vẫn chờ bạn "kết thúc" phản hồi. (res.end ()); express .json () tới cái này cho bạn
131

22

Bạn phải sử dụng JSON.stringify()chức năng đi kèm với động cơ V8 mà nút sử dụng.

var objToJson = { ... };
response.write(JSON.stringify(objToJson));

Chỉnh sửa: Theo như tôi biết, IANA đã chính thức đăng ký kiểu MIME cho JSON như application/jsontrong RFC4627 . Nó cũng được liệt kê trong danh sách Loại phương tiện Internet tại đây .


Tiêu đề loại nội dung cũng có nên được đặt thành application / json hoặc một cái gì đó tương tự không? Thực hành tốt nhất cho điều này là gì?
dấu và

1
Có, để làm cho nó trở thành một phản hồi hợp lệ, khách hàng sẽ hiểu. Thêm: res.writeHead (200, {'Content-Type': 'application / json'}) trước
Ali

12

Theo câu trả lời của JamieL cho một bài đăng khác :

Vì Express.js 3x đối tượng phản hồi có một phương thức json () đặt tất cả các tiêu đề chính xác cho bạn.

Thí dụ:

res.json({"foo": "bar"});

Làm cách nào để làm điều tương tự với tệp JSON?
HGB

đừng quên res.end () nếu bạn sử dụng cái này, tôi cần nó
Charles Harring

2

nhanh chóng có thể có các định dạng JSON phạm vi ứng dụng.

sau khi xem express \ lib \ response.js, tôi đang sử dụng quy trình này:

function writeJsonPToRes(app, req, res, obj) {
    var replacer = app.get('json replacer');
    var spaces = app.get('json spaces');
    res.set('Content-Type', 'application/json');
    var partOfResponse = JSON.stringify(obj, replacer, spaces)
        .replace(/\u2028/g, '\\u2028')
        .replace(/\u2029/g, '\\u2029');
    var callback = req.query[app.get('jsonp callback name')];
    if (callback) {
        if (Array.isArray(callback)) callback = callback[0];
        res.set('Content-Type', 'text/javascript');
        var cb = callback.replace(/[^\[\]\w$.]/g, '');
        partOfResponse = 'typeof ' + cb + ' === \'function\' && ' + cb + '(' + partOfResponse + ');\n';
    }
    res.write(partOfResponse);
}

Đây có phải là để gửi lại các hàm javascript không? Tôi hiểu đúng không? Và tại sao bạn sẽ làm điều đó? Chỉ tò mò
Sam Vloeberghs

0
const http = require('http');
const url = require('url');

http.createServer((req,res)=>{

    const parseObj =  url.parse(req.url,true);
    const users = [{id:1,name:'soura'},{id:2,name:'soumya'}]

    if(parseObj.pathname == '/user-details' && req.method == "GET") {
        let Id = parseObj.query.id;
        let user_details = {};
        users.forEach((data,index)=>{
            if(data.id == Id){
                user_details = data;
            }
        })
        res.writeHead(200,{'x-auth-token':'Auth Token'})
        res.write(JSON.stringify(user_details)) // Json to String Convert
        res.end();
    }
}).listen(8000);

Tôi đã sử dụng mã trên trong dự án hiện có của mình.

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.