当前位置: 首页 > 知识库问答 >
问题:

JsonSluper 和 JsonOutput 将字符串中的一些符号转换为奇怪的字符

宇文航
2023-03-14

我正在使用一个groovy脚本将正文中的一些值转换为它们的原始数据类型。为了实现这一点,我使用了JsonSluper和JsonOutput。JsonSluper和JsonOutput正在将字符串中的一些符号从json主体转换为奇怪的字符。有什么建议可以解决这个问题吗?

示例:“UnitPrice”:“99美分/磅”转换为“UnitPrice”::“99\u00a2每磅”

已转换为

我的脚本:

def body = message.getBody(java.lang.String);
    def JSONInput = new JsonSlurper().parseText(body);
    
    JSONInput.data.ProductStorePrices.each{
        if(it.Price != null){
            it.Price = it.Price.toDouble();
        }
        if(it.Active != null){
            it.Active = it.Active.toBoolean();
        }
    }
message.setBody(JsonOutput.toJson(JSONInput))

下面是我的转换前JSONbody:

{
    "data": {
        "ProductStorePrices": [
            {
                "Product_LegacyID": "1005",
                "Store_LegacyStoreID": "2",
                "DistributionCenter_LegacyRegionID": "916",
                "PriceType_Code": "unadjustedRetail",
                "ValidFrom": "2000-01-01T00:00:00Z",
                "Price": "9.99",
                "ValidTo": "2022-05-04T23:59:59Z",
                "Currency": "USD",
                "Active": "false",
                "UnitPrice": "99¢ per lb.",
                "LastChangedAt": "2022-05-04T23:59:59Z"
            }
        ]
    }
}

使用上面的groovy脚本转换后我的输出JSONBody

{
    "data": {
        "ProductStorePrices": [
            {
                "Product_LegacyID": "1005",
                "Store_LegacyStoreID": "2",
                "DistributionCenter_LegacyRegionID": "916",
                "PriceType_Code": "unadjustedRetail",
                "ValidFrom": "2000-01-01T00:00:00Z",
                "Price": 9.99,
                "ValidTo": "2022-05-04T23:59:59Z",
                "Currency": "USD",
                "Active": false,
                "UnitPrice": "99\u00a2 per lb.",
                "LastChangedAt": "2022-05-04T23:59:59Z"
            }
        ]
    }
}

共有1个答案

淳于健
2023-03-14

这不是奇怪的符号,是独角兽。我正在使用图书馆com.google.code。gson用于这些目的。试试这个:

def gson = new GsonBuilder().disableHtmlEscaping().create()
def json = gson.toJson(JSONInput)
println(json)

输出:< Code > { " data ":{ " productstoreprice ":[{ " Active ":false," Currency":"USD "," distribution center _ LegacyRegionID ":" 916 "," LastChangedAt ":" 2022-05-04t 23:59:59Z "," Price":9.99," Price type _ Code ":" unadjusted retail "," Product_LegacyID":"1005 "," Store _ legacyreid ":" 2 "," UnitPrice ":"每磅99。"、" valid from ":" 2000-01-01t 00:00:00Z "、" valid to ":" 2022-05-04t 23:59:59Z " }]}

 类似资料:
  • 问题内容: 我已经将其输入python shell: 我期望0.1 * 0.1不是0.01,因为我知道以10为底的0.1是周期性的,以2为底。 我已经看过20个以上的字符,因此我希望能得到20个。为什么我得到4? 好吧,这解释了为什么我给了我4,但为什么回归? 为什么不回合?(我已经阅读了这个答案,但是我想知道他们如何决定何时对浮点数进行取整,以及何时对不进行浮点取整) 因此,浮子的准确性似乎是一

  • 问题内容: 我有一些奇怪的字符串池行为的问题。我正在使用比较相等的字符串来找出它们是否在池中。 输出为: 这对我来说是一个很大的惊喜。有人可以解释一下吗?我认为这是在编译时发生的。但是,为什么添加到String 根本没有任何区别呢? 问题答案: 是一个编译时常量,而 不是。因此,前者仅编译为字符串常量“ 555”,而后者则编译为实际的方法调用和串联,从而生成一个新的String实例。 另请参见JL

  • 问题内容: 如何将Unicode字符串(包含额外的字符,如£$等)转换为Python字符串? 问题答案:

  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或

  • 问题内容: 如何从字符串中删除奇怪的和不需要的Unicode字符(例如带问号的黑色菱形)? 更新: 请告诉我对应于“其中带有问号的黑色菱形”的Unicode字符串或正则表达式。 问题答案: 带问号的黑色菱形不是unicode字符- 它是字体无法显示的字符的占位符。如果字符串中存在一个字形,而该字形不是用于显示该字符串的字体,则将看到占位符。定义为U + FFFD:它的外观取决于您使用的字体。 您可