NodeJS -解析JSON(只有字符串或数字)
NodeJS - Parse JSON (only strings or numbers)
我有点进退两难。我已经在我的应用程序的几个地方,我使用AJAX来传输JSON数据。例如,从注册表单接收数据:
try {
var data = JSON.parse(json);
}
catch(e) {
// ...
}
var fields = {
firstName: data.firstName || "",
lastName: data.lastName || "",
...
};
那么我需要对这些字段做些什么。假设:
if (fields.firstName) {
// OK save it to the DB
}
if(fields.lastName.xxx()) { // xxx() is a method that belongs to JS String Object
// Do something...
}
问题是如果fields.firstName
或fields.lastName
是{}
/[]
呢?如果有人发送了一个带有错误数据类型的修改JSON,可能会发生这种情况,整个应用程序将崩溃,因为方法xxx
缺失。
我必须检查每个字段的类型,它是否真的是一个字符串,一个数字,一个数组…或者有没有其他更好的方法?
不幸的是,这是你在使用像JavaScript这样的动态语言时必须面对的问题。
一个可能的解决方案是不使用String方法,而是创建一个函数先检查它的参数:
// original, with string methods
if (text instanceof String && text.trim().length === 0) { ... }
// alternative, define function first
var isEmptyString = function(text) {
if (!(text instanceof String)) throw new Error("Argument must be a String");
return text.trim().length === 0;
}
// use it in your code
if (isEmptyString(text)) { ... }
可以产生更清晰的代码。当你必须在浏览器中使用这些函数时,请确保不要在全局作用域中定义它们。
您必须创建一个小验证器。像这样:
var format = {
foo: "string",
bar: "string"
};
var data = {
foo: "bar",
bar: []
}
var validate = function (data, format) {
for(var d in data) {
if(typeof data[d] !== format[d])
return false;
}
return true;
}
console.log(validate(data, format));
您还可以像这样删除无效数据:
var format = {
foo: "string",
bar: "string"
};
var data = {
foo: "bar",
bar: []
}
var validate = function (data, format) {
for(var d in data) {
if(typeof data[d] !== format[d])
delete data[d];
}
return data;
}
console.log(validate(data, format));
除了Tharabas建议的,您还可以利用JSON.parse
的第二个参数来进行完整性检查:
JSON.parse(data, function(key, value) {
return key === 'firstName' ? cleanup(value) : '';
});
详情请参阅本页:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
相关文章:
- Javascript逻辑运算符和字符串/数字
- Javascript排序字符串或数字
- 制作一个regex来验证只有一个数字的字符串
- 将数字转换为字符串数字
- 将HTML(支持文件)中的令牌(字符串、数字等)传递给LogiXML
- 如何从字符串中删除除字母、数字、空格、感叹号和问号之外的所有内容
- 如何替换JavaScript字符串中除字母和数字之外的所有内容(空格/符号)
- 从JS中的字符串中读取数字的库
- 字符串数字-从123456转换为123456
- JavaScript如何面对字符串数字工作
- 将字符串数字的格式设置为货币
- Javascript:如何检索*字符串*数字的小数位数
- 试图理解无法在JavaScript中改变字符串/数字的概念
- Javascript没有使用parseInt函数添加两个字符串数字
- 在jQuery中将整数格式化为字符串数字
- Regex格式字符串数字与逗号和2个小数在javascript
- 如何使用javascript排序字符串数字
- 转换'字符串数字'到一个数字
- 检查字符串/数字类型的字段是否为空
- JavaScript:将字符串/数字转换为数字或null,0返回0