Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php JSON对象regex&;合并_Php_Regex_Json - Fatal编程技术网

Php JSON对象regex&;合并

Php JSON对象regex&;合并,php,regex,json,Php,Regex,Json,我使用正则表达式从VDF(阀门数据格式)转换JSON字符串,如下所示: {"items_game": { "prefabs": { ... "coupon_crate_prefab": { "prefab": "weapon_case_base", "item_type": "coupon_crate", "attributes": { "cannot

我使用正则表达式从VDF(阀门数据格式)转换JSON字符串,如下所示:

{"items_game": {
    "prefabs": {
        ...
        "coupon_crate_prefab": {
            "prefab": "weapon_case_base",
            "item_type": "coupon_crate",
            "attributes": {
                "cannot trade": "1"
            },
            "capabilities": {
                "can_delete": "0"
            },
            "attributes": {
                "expiration date": {
                    "attribute_class": "expiration_date",
                    "force_gc_to_generate": "1",
                    "use_custom_logic": "expiration_period_days_from_now",
                    "value": "2"
                }
            }
        },
        "coupon_key_prefab": {
            "prefab": "csgo_tool",
            "item_type": "coupon_key",
            "attributes": {
                "cannot trade": "1"
            },
            "capabilities": {
                "can_delete": "0"
            },
            "attributes": {
                "expiration date": {
                    "attribute_class": "expiration_date",
                    "force_gc_to_generate": "1",
                    "use_custom_logic": "expiration_period_days_from_now",
                    "value": "2"
                }
            }
        }
        ...
    }
}
通缉结果:

        "coupon_key_prefab": {
            "prefab": "csgo_tool",
            "item_type": "coupon_key",
            "attributes": {
                "cannot trade": "1",
                "expiration date": {
                    "attribute_class": "expiration_date",
                    "force_gc_to_generate": "1",
                    "use_custom_logic": "expiration_period_days_from_now",
                    "value": "2"
                }
            },
            "capabilities": {
                "can_delete": "0"
            }
        }
正如您所看到的,有重复的
属性
,我需要合并它们,因为这在JSON中无效。

我该怎么做?(可能使用preg_replace)

使用regex执行此操作是一个非常糟糕的主意,因为JSON是一种数据结构,可以通过多种方式格式化,并执行嵌套等操作

这使得使用正则表达式进行解析不是一个好主意,因为如果这样做,最多只能创建脆弱的代码

但我也不确定这样做的有效性——如果您通过验证器运行JSON,重复的密钥会相互覆盖

use strict;
use warnings;

use JSON;

local $/; 
print to_json ( from_json ( <DATA>) , { pretty => 1 } );

__DATA__
{
    "items_game": {
        "prefabs": {
            "coupon_crate_prefab": {
                "prefab": "weapon_case_base",
                "item_type": "coupon_crate",
                "attributes": {
                    "cannot trade": "1"
                },
                "capabilities": {
                    "can_delete": "0"
                },
                "attributes": {
                    "expiration date": {
                        "attribute_class": "expiration_date",
                        "force_gc_to_generate": "1",
                        "use_custom_logic": "expiration_period_days_from_now",
                        "value": "2"
                    }
                }
            }
        }
    }
}
使用严格;
使用警告;
使用JSON;
本地$/;
打印到_json(从_json(),{pretty=>1});
__资料__
{
“物品与游戏”:{
“预制件”:{
“挂片板条箱预制件”:{
“预制”:“武器、箱子、底座”,
“项目类型”:“优惠券板条箱”,
“属性”:{
“无法交易”:“1”
},
“能力”:{
无法删除“:“0”
},
“属性”:{
“到期日”:{
“属性类”:“到期日”,
“强制生成”:“1”,
“使用自定义逻辑”:“从现在起到期日”,
“值”:“2”
}
}
}
}
}
}
这将解析您的JSON,我希望我已经修复了它以匹配您的源代码-请注意,它是您数据的“被删除”部分。我认为这是大多数解析库中的常见行为。因此,这实际上可能意味着你的“事情”正在以同样的方式“处理”

因此,很难给你一个明确的答案,什么是最好的解决办法。理想情况下,您可以使用JSON解析器,但您所做的并不是JSON规范中定义的,因此您将得到可变的结果

编辑:下面是注释-看起来VDF类似于JSON,但并不完全相同

我仍然不会使用正则表达式,但可以尝试递归解析。关闭
{
并“传递”类似于JSON的内容,这样就可以得到一个命名键值对的底部分支,然后可以对其进行哈希化

如果仍然没有更好的答案,我可能会在稍后编写一个perl示例(对不起,现在没有时间)

您可能会在此处找到可以使用的内容:


但这可能也是为什么不使用regex的一个很好的例子:)

使用regex这样做是一个非常糟糕的主意,因为JSON是一种可以通过多种方式格式化的数据结构,可以执行嵌套等操作

这使得使用正则表达式进行解析不是一个好主意,因为如果这样做,最多只能创建脆弱的代码

但我也不确定这样做的有效性——如果您通过验证器运行JSON,重复的密钥会相互覆盖

use strict;
use warnings;

use JSON;

local $/; 
print to_json ( from_json ( <DATA>) , { pretty => 1 } );

__DATA__
{
    "items_game": {
        "prefabs": {
            "coupon_crate_prefab": {
                "prefab": "weapon_case_base",
                "item_type": "coupon_crate",
                "attributes": {
                    "cannot trade": "1"
                },
                "capabilities": {
                    "can_delete": "0"
                },
                "attributes": {
                    "expiration date": {
                        "attribute_class": "expiration_date",
                        "force_gc_to_generate": "1",
                        "use_custom_logic": "expiration_period_days_from_now",
                        "value": "2"
                    }
                }
            }
        }
    }
}
使用严格;
使用警告;
使用JSON;
本地$/;
打印到_json(从_json(),{pretty=>1});
__资料__
{
“物品与游戏”:{
“预制件”:{
“挂片板条箱预制件”:{
“预制”:“武器、箱子、底座”,
“项目类型”:“优惠券板条箱”,
“属性”:{
“无法交易”:“1”
},
“能力”:{
无法删除“:“0”
},
“属性”:{
“到期日”:{
“属性类”:“到期日”,
“强制生成”:“1”,
“使用自定义逻辑”:“从现在起到期日”,
“值”:“2”
}
}
}
}
}
}
这将解析您的JSON,我希望我已经修复了它以匹配您的源代码-请注意,它是您数据的“被删除”部分。我认为这是大多数解析库中的常见行为。因此,这可能实际上意味着您的“东西”正以相同的方式被“处理”

因此,很难给你一个明确的答案来说明什么是最好的方法。理想情况下,你会使用JSON解析器,但你所做的事情并没有在JSON规范中定义,因此你会得到不同的结果

编辑:下面是注释-看起来VDF类似于JSON,但并不完全相同

我仍然不会使用正则表达式,但可能会尝试递归解析。将其键入
{
并“传递”类似JSON的内容,这样您就可以得到一个命名键值对的底部分支,然后进行哈希化

如果仍然没有更好的答案,我可能会在稍后编写一个perl示例(对不起,现在没有时间)

您可能会在此处找到可以使用的内容:


但这可能也是为什么不使用regex的一个很好的例子:)

使用regex这样做是一个非常糟糕的主意,因为JSON是一种可以通过多种方式格式化的数据结构,可以执行嵌套等操作

这使得使用正则表达式进行解析不是一个好主意,因为如果这样做,最多只能创建脆弱的代码

但我也不确定这样做的有效性——如果您通过验证器运行JSON,重复的密钥会相互覆盖

use strict;
use warnings;

use JSON;

local $/; 
print to_json ( from_json ( <DATA>) , { pretty => 1 } );

__DATA__
{
    "items_game": {
        "prefabs": {
            "coupon_crate_prefab": {
                "prefab": "weapon_case_base",
                "item_type": "coupon_crate",
                "attributes": {
                    "cannot trade": "1"
                },
                "capabilities": {
                    "can_delete": "0"
                },
                "attributes": {
                    "expiration date": {
                        "attribute_class": "expiration_date",
                        "force_gc_to_generate": "1",
                        "use_custom_logic": "expiration_period_days_from_now",
                        "value": "2"
                    }
                }
            }
        }
    }
}
使用严格;
使用警告;
使用JSON;
本地$/;
打印到_json(从_json(),{pretty=>1});
__资料__
{
“物品与游戏”:{
“预制件”:{
“挂片板条箱预制件”:{
“预制”:“武器、箱子、底座”,
“项目类型”:“优惠券板条箱”,
“属性”:{
“无法交易”:“1”
},
“能力”:{
无法删除“:“0”
},
“属性”:{
“到期日”:{
“属性类”:“到期日”,