【问题标题】:JavaScript retrieve and replace string parts in stringified JSON [duplicate]JavaScript检索和替换字符串化JSON中的字符串部分[重复]
【发布时间】:2014-05-12 22:49:28
【问题描述】:

我有一个与之比较的字符串:

{
    "objects": [{
        "originY": "top",
        "left": 0,
        "top": 0,
        "width": 118.33,
        "height": 100,
        "name": 1
    }, {
        "originY": "top",
        "left": 0,
        "top": 0,
        "width": 118.33,
        "height": 100,
        "name": 2
    }],
    "background": ""
}

我需要循环到这个字符串并检索 left、top、width 和 height 的值并将它们乘以一个因子,然后再次将它们保存为一个新字符串。

知道我该如何做到这一点吗?

【问题讨论】:

  • 这看起来很像 JSON...解析、更改、字符串化。
  • 必须尝试这样做吗?
  • 为什么要字符串化?将其修改为原始形式(作为对象)要容易得多。
  • @gco:JSON 是一个字符串。你所拥有的是 JSON。它是一个字符串化的对象,而不是字符串化的 JSON。如果它作为一个对象开始,只需将它用作一个对象,然后如果你必须有 JSON,则将结果字符串化。
  • 然后@dystroy 说的 - 使用JSON.parse 然后操作对象然后JSON.stringify。不要为了避免解析而浪费时间尝试字符串操作。这不值得努力。

标签: javascript json string replace


【解决方案1】:

由于字符串是 JSON,处理数据最简单的方法是将其解析为对象数组,更新值,然后再次将其作为字符串输出。

// Parse
var container = JSON.parse(yourString);

// Get and update
var i, len, top, left, width, height;
len = container.objects.length;
for (i = 0; i < len; i++) {
    top = container.objects[i].top;
    left = container.objects[i].left;
    height= container.objects[i].height;
    width = container.objects[i].width;
    // * Save top, left, width somewhere. *
    // Multiply by some factor.
    container.objects[i].top *= factor;
    container.objects[i].left *= factor;
    container.objects[i].height *= factor;
    container.objects[i].width *= factor;
}

// Convert to string again.
theString = JSON.stringify(container);

【讨论】:

    【解决方案2】:

    您可以将 json 分配给一个变量,然后对其进行迭代并做任何您想做的事情

            var koko = {
                "objects": [{
                    "originY": "top",
                    "left": 1,
                    "top": 0,
                    "width": 118.33,
                    "height": 100,
                    "name": 1
                }, {
                    "originY": "top",
                    "left": 2,
                    "top": 0,
                    "width": 118.33,
                    "height": 100,
                    "name": 2
                }],
                "background": ""
            }
    
    
    
            for(var i=0;i<koko.objects.length;i++) { koko.objects[i].left = 10; }
    

    【讨论】:

      猜你喜欢
      • 2016-09-22
      • 2020-12-19
      • 1970-01-01
      • 2012-07-23
      • 2019-02-16
      • 2011-09-04
      • 2021-03-01
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多