正则表达式替换 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 数组中没有带有number1number2 键的对象吗?还是在少数对象中缺少这些键? 我的错误,我出于问题的目的调整了 JSON 对象,却忘记在我的代码中将其改回。一切正常,谢谢! 很高兴它有帮助!

以上是关于正则表达式替换 JSON 对象内的字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式从 JSON 中删除具有给定属性的对象

如何用正则表达式替换字符串

正则表达式-将字符串替换成json格式

js正则表达式替换捕获内容

python 爬虫入门之正则表达式 一

JS如何用正则表达式 获取字符串内的匹配部份?