代码之家  ›  专栏  ›  技术社区  ›  Joe

如何替换JSON文本中的双反斜杠?

  •  2
  • Joe  · 技术社区  · 6 年前

    我有这个JSON文件:

    {
        "module": {
            "data": {
                "orderInfo_203759231000": {
                    "fields": {
                        "createdAt": "Dipesan pada\\r\\n 17 Mei 2018",
                        "tradeOrderId": 203759231000
                    }
                },
                "orderInfo_203759231000": {
                    "fields": {
                        "createdAt": "Dipesan pada\\r\\n 22 Mei 2018",
                        "tradeOrderId": 203759231000
                    }
                },
                "orderInfo_203759231000": {
                    "fields": {
                        "createdAt": "Dipesan pada\\r\\n 22 Mei 2018",
                        "tradeOrderId": 203759231000
                    }
                },
                "orderInfo_203759231000": {
                    "fields": {
                        "createdAt": "Dipesan pada\\r\\n 22 Mei 2018",
                        "tradeOrderId": 203759231000
                    }
                },
                "orderInfo_203759231000": {
                    "fields": {
                        "createdAt": "Dipesan pada\\r\\n 22 Mei 2018",
                        "tradeOrderId": 203759231000
                    }
                }
            }
        }
    }
    

    我想移除 Dipesan pada\\r\\n 以下是我的尝试:

    sed 's/Dipesan pada \\\\r\\\\n//g' file.json
    

    但它不起作用,我希望最终结果只是这样的日期:

    "createdAt": "17 Mei 2018",
    "createdAt": "22 Mei 2018",
    "createdAt": "22 Mei 2018",
    etc...
    

    我该怎么修?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Thomas    6 年前

    你的反斜杠很好,祝贺你!问题在于放置一个烦人的空间:

    sed 's/Dipesan pada \\\\r\\\\n//g' file.json # bad
    sed 's/Dipesan pada\\\\r\\\\n //g' file.json # good
    
        2
  •  1
  •   peak    6 年前

    使用 jq 具有 update operator sub 过滤,你可以做如下。为了使它工作,需要两次逃走。

    jq '(.module.data[].fields.createdAt)|=(sub("Dipesan pada\\\\r\\\\n ";""))' input.json
    

    测试日期: jq-play . 这是在JSON输入上测试的,修改了键以避免重复。