【问题标题】:How to verify JSON string and return error if JSON is not okay如果 JSON 不正确,如何验证 JSON 字符串并返回错误
【发布时间】:2015-12-31 03:42:30
【问题描述】:

我正在尝试验证 JSON 对象是否正常。如果 JSON 正常,我有这个服务器应该能够返回 true,否则返回错误。 我正在使用 curl 发出这样的请求:

curl -D- -H 'Content-Type: application/json' -d '{"name":"user","pass":"uwish"}' 'http://localhost:8020/register'

在服务器脚本中,控制台日志调用 verifyJSON 并返回 false,但 JSON 对象没问题。

我想在解析时捕获错误(如果 JSON 不正确)并将其发送到客户端。我试图做到这一点,但我不确定我做了什么。 如果有人可以帮助我,我将不胜感激。感谢您的宝贵时间。
这是服务器代码:

var connect = require('connect');
var cors = require('cors');
var http = require('http');
var bodyParser = require('body-parser');
var corsOpts = { origin: '*' };
var app = connect();

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.use(cors(corsOpts)).use(function (req, res, next) { 
console.log(req.method);
console.log(req.url);
if(req.url === '/register' && req.method === 'POST')
    register(req,res);
else
    if(req.url === '/ranking' && req.method === 'GET')
        ranking(req, res);

}).listen(8020);

console.log("Server running on 8020");

function register(req , res){
res.setHeader('Content-Type', 'application/json');

var somedata = {}; // return this object if JSON req is okay

console.log(req.body);
console.log(verifyJSON(req.body));

//trying to send the error to the client

if( err = verifyJSON(req.body) ){
    somedata.error = err; // not sure if this is right
    res.end(JSON.stringify(somedata));
}
else
    console.log("do something with this JSON data");

}

function verifyJSON(str){
try {
    JSON.parse(str);
} catch (e) {
    return false;
}
return true;    
}

【问题讨论】:

  • 在一个稍微不相关的说明中,在生产中,您不应该将 JSON 发送到服务器只是以确定它是否有效格式化...
  • 这不是它的目的。我只是想确保我收到的 JSON 数据是有效的,以便进一步使用它。 @LukePark
  • @snobis JSON.parse:如果它解析,它是有效的 JSON(尽管它可能被完全伪造的数据填充)。如果它不解析(并抛出异常),则它是无效的。因为这是verifyJSON 所做的,所以我不确定问题是什么......通常会使用数据,使得“验证”变得多余,因为它丢弃了解析的数据。
  • @snobis 在“无效”的情况下,没有res.end,这可能是.. 有问题的。如果verifyJSON 调用返回false,那么它不是有效的JSON - 那么从req.body 读取的值是什么
  • 您可以尝试使用 JSON.parse(json_string) 和 try/catch 来验证您的 json 字符串。如果在 catch 中出错,那么它是无效的,否则是有效的 json 格式

标签: javascript json node.js curl express


【解决方案1】:

使用 try...catch around parse 来检查 json 输入的有效性,返回实际的错误消息,而不仅仅是 true 或 false。

function verifyJson(input){
   try {
      JSON.parse(input);
   } catch(ex) {
      return ex.message; // Is invalid 
   }
   return false; // Is valid 
}

【讨论】:

  • 我试过了,它返回错误 {"error":"Unexpected token o"}。不知道为什么。 JSON 有效
  • 听起来是对的……它会返回一条错误消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多