如何处理含字符串与整数的$.getJSON文件?解析整数及报错排查
JSON数据解析与TypeError错误排查
错误原因分析
「Uncaught TypeError: val.number.search is not a function」这个报错的核心原因很明确:你代码里的val.number是整数类型,而search()是JavaScript字符串专属的方法,整数没有这个方法,直接调用自然会抛出类型错误。
之所以val.number是整数,是因为$.getJSON会自动根据JSON文件里的数据类型解析:如果你的data.json中number字段是数字格式(比如"number": 1234),它会被解析成JavaScript的Number类型,而非字符串。
代码修复方案
把整数转换成字符串后再调用字符串方法即可,有两种常用写法:
写法1:用toString()转换后调用search()
修改判断条件为:
if(val.number.toString().search(myExp) != -1)
写法2:用正则的test()方法(更高效)
正则表达式的test()方法可以直接检测数值(会自动转字符串),代码更简洁:
if(myExp.test(val.number))
修改后的完整代码:
$('#search').keyup(function(){ var searchField = $('#search').val(); var myExp = new RegExp(searchField, "i"); $.getJSON('data.json', function(data){ if(searchField === '') { $('#update').html(''); return; } var output = '<ul class="searchresults">'; $.each(data, function(key, val){ // 用test方法更简洁高效 if(myExp.test(val.number)) { output += '<li>'; output += '<p>' + val.number + '</p>'; output += '<p>' + val.name + '</p>'; output += '</li>'; } }); output += '</ul>'; $('#update').html(output); }); });
处理JSON中的字符串与整数
1. 自动解析规则
$.getJSON会自动按照JSON数据类型转换为对应JS类型:
- JSON里带引号的字符串(比如
"name": "张三")→ JS的String类型 - JSON里不带引号的数字(比如
"age": 25)→ JS的Number类型 - JSON里的布尔值(
true/false)→ JS的Boolean类型
2. 类型转换技巧
- 整数转字符串:使用
val.number.toString()或者String(val.number) - 字符串转整数:使用
parseInt(val.stringNumber, 10)(第二个参数10指定十进制,避免意外进制问题) - 字符串转浮点数:使用
parseFloat(val.stringFloat)
内容的提问来源于stack exchange,提问作者Kiezgold
相关产品推荐
相关产品推荐

