正则表达式替换 JSON 对象内的字符串
Posted
技术标签:
【中文标题】正则表达式替换 JSON 对象内的字符串【英文标题】:Regex to replace strings inside of JSON Object 【发布时间】:2018-06-24 04:38:07 【问题描述】:JSON 对象的结构如下:
"headings": [
"A",
"B",
"C"
],
"results": [
"id": 1,
"name": "Unknown",
"number1": 12000,
"number2": 20000
,
"id": 2,
"name": "Unknown2",
"number1": 12000,
"number2": 20000
]
我获取数据的 AJAX 如下所示:
var myChart= [];
/*Knockout.js*/
var viewModel =
myChartData: ko.observable()
;
$.ajax(
method: "GET",
url: myAPI,
dataType: 'json',
success: function (data)
myChart[0] = data.results;
viewModel.myChartData(myChart[0]);
);
一些背景信息数据进入空白数组的原因是因为我有一个表格,旁边有一个按钮,可以让您在数据之间交换。所以还有另一个 AJAX,它与这个几乎相同,但正在插入 myChart[1]。
现在我正在使用 KnockoutJS 来遍历 html 中的数据,例如:
<tbody id="topretailers" data-bind="foreach: leftChartData">
<tr>
<td data-bind="text: name"></td>
<td data-bind="text: number1"></td>
<td data-bind="text: number2"></td>
</tr>
</tbody>
我想为数字添加分隔符,例如 (12,000)。但是,理想情况下,我希望在它进入可观察到的淘汰赛之前执行此操作,这样我仍然可以使用 foreach。
我已经准备好使用正则表达式.replace(/\B(?=(\d3)+(?!\d))/g, ",")
,但我不知道最好的方法。
有没有办法替换整个结果对象中的所有数字 1 和数字 2?无需创建新对象?
所以最终表格将如下所示:
table
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
td, th
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
tr:nth-child(even)
background-color: #dddddd;
<table>
<tr>
<th>Name</th>
<th>Number 1</th>
<th>Number 2</th>
</tr>
<tr>
<td>Unknown</td>
<td>12,000</td>
<td>20,000</td>
</tr>
<tr>
<td>Unknown2</td>
<td>12,000</td>
<td>20,000</td>
</tr>
</table>
【问题讨论】:
相关问题:Formatting rules for numbers in KnockoutJS 【参考方案1】:你可以这样做:
// This is data.results here
// coming from ajax request
var results = [
"id": 1,
"name": "Unknown",
"number1": 12000,
"number2": 20000
,
"id": 2,
"name": "Unknown2",
"number1": 14000,
"number2": 25000
];
// Loop over results array and update the key values
for (var i = 0; i< results.length; i++)
results[i].number1 = results[i].number1.toString().replace(/\B(?=(\d3)+(?!\d))/g, ",");
results[i].number2 = results[i].number2.toString().replace(/\B(?=(\d3)+(?!\d))/g, ",")
console.log(results)
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
我遇到了一个错误——“Uncaught TypeError: Cannot read property 'toString' of undefined” 在data.results
数组中没有带有number1
和number2
键的对象吗?还是在少数对象中缺少这些键?
我的错误,我出于问题的目的调整了 JSON 对象,却忘记在我的代码中将其改回。一切正常,谢谢!
很高兴它有帮助!以上是关于正则表达式替换 JSON 对象内的字符串的主要内容,如果未能解决你的问题,请参考以下文章