php - 将 Tcl 字典转换为 JSON 或 ARRAY 的 PHP 解析器转换器
问题描述
经过很长时间的研究,没有找到解决方案。所以stackoverflow是我最后的希望。
在 PHP 中,我需要一个解析器来从 postgreSQL DB 获取数据。
字符串构造如下:
"keytext {this is my value text 1} key with multi words {value text 2} another key {key_value number 3}"
所以我们有键(可以由几个单词组成)和花括号中的值。
我认为,这种数据类型来自 TCL。
我们如何在 PHP 7/8 中将此字符串转换为 JSON 字符串或数组?
非常感谢你试图帮助我!
更新:
哦,天哪,我发现了第二个条件,这使得将 TCL dict 转换为 JSON 格式变得更加复杂:
user_receiver {all} manifest 3200 transferCode {B45} time hours 0 status {1a} local {} is online {}
如您所见,字符串中有数字值,它们不包含在花括号中。
-> 字符串值在花括号中
-> 数值不是
那么,有谁知道,如何使用 REGEX 来获取键值对?
解决方案
看一下这个
$str = "keytext {this is my value text 1} key with multi words {value text 2} another key {key_value number 3}";
$chars = str_split($str);
$result_arr = [];
$make_arr_key = true;
$make_arr_key_val = false;
$arr_key = '';
$arr_key_val = '';
foreach ($chars as $char) {
if($char == '{') {
$make_arr_key = false;
$arr_key_val = '';
$make_arr_key_val = true;
}
if($char == '}') {
$result_arr[trim($arr_key)] = trim($arr_key_val);
$arr_key = '';
$make_arr_key = true;
$make_arr_key_val = false;
}
if($make_arr_key) {
if($char != '}'){
$arr_key .= $char;
}
}
if($make_arr_key_val) {
if($char != '{') {
$arr_key_val .= $char;
}
}
}
print_r($result_arr);
输出:
推荐阅读
- c# - 如何将传递的值添加到数据库?
- javascript - 如何在我的 Vue 向导表单中使用字段验证?
- laravel - Laravel 多对多关系三种方式
- angular - 为什么在 index.html 文件中插入很棒的字体后,Angular 7 项目中会出现一个正方形?
- ssrs-2008 - 如何为过滤器编写 MDX 公式
- python - 如何在 python 中保存截断的 svd 模型
- php - 向 WooCommerce 产品变体添加后缀会被覆盖
- amazon-web-services - 限制对使用 API Gateway 作为代理的 S3 静态网站的访问
- c++ - 在 C++ 中打开 .dat 文件时出现问题
- sqlite - 如果满足某些条件,我如何有条件地停止 SQLite 脚本?