0

我有一个 json 文件,我需要更新它的数值并写回新文件。这是我的示例脚本

[
  {
    "type": "flipImage",
     "image": "img/new.jpg",
     "trigger": "{{10,80},{300,350}}",
     "animationDuration": "1.0"
   }
 ]

"trigger": "{{10,80},{300,350}}"需要更新为其他值的数值 。我设法通过 json_decode() 在 php 中获取值。解码后返回值{{10,80},{300,350}}

这是解码脚本

$json_data  = file_get_contents('json.txt');    
$encoded_data = json_decode($json_data,true);   
echo $encoded_data[0]['trigger'];

但我陷入了更新部分。如何拆分值,然后更新并写回更新的 json 文件?

任何帮助都非常可观。

更新 首先,我需要解析该数值,然后对其进行一些计算。计算后将整个 json 写回新文件

4

3 回答 3

1

随着文件更新:

<?php
$file = 'json.txt';
$json_data = file_get_contents($file);    
$encoded_data = json_decode($json_data,true);  

$encoded_data[0]['trigger'] = "{{X,Y},{X,Y}}"; // New value

// Update file
$fp = fopen($file, 'w+');
fputs($fp, json_encode($encoded_data));
fclose($fp);
?>
于 2013-08-13T10:03:50.237 回答
1

如果您确定不会发现格式的变化,这是一个非常简单的正则表达式(转义使其看起来比实际更难):

<?php

$input = '{{10,80},{300,350}}';
$output = null;

if( preg_match('/^\{\{(\d+),(\d+)\},\{(\d+),(\d+)\}\}$/', $input, $matches) ){
    // Example: increment all numbers in 1
    $matches[1]++;
    $matches[2]++;
    $matches[3]++;
    $matches[4]++;

    $output = sprintf('{{%d,%d},{%d,%d}}', $matches[1], $matches[2], $matches[3], $matches[4]);
}

var_dump($output);
于 2013-08-13T10:09:20.660 回答
0

尝试这个

如果值是固定的(4),则创建 4 个变量,例如

$tr=$encoded_data[0]['trigger'];
$x1=$tr[0][0];
$y1=$tr[0][1];
$x2=$tr[1][0];
$y2=$tr[1][1];
// do calculations here
$encoded_data[0]['trigger']="{{$x1,$y1},{$x2,$y2}}";
echo json_encode($encoded_data);
于 2013-08-13T09:59:03.810 回答