我正在努力将数据库中的信息读入JSON文件。我已经对文件读取的代码很好,但我正在寻找的是一种只附加文件中不存在的新数据的方法。每次运行我的代码时,它每次都会添加存储在数据库中的所有信息。
$con = mysql_connect('localhost', '', '') or die('Error connecting to server');
mysql_select_db('twitter', $con);
$file = 'file.json';
$query = mysql_query('SELECT * FROM sample_data');
//Define columns
$table = array();
$table['cols'] = array(
array('label' => 'Username', 'type' => 'string'),
array('label' => 'Retweet_count', 'type' => 'number'),
array('label' => 'Origin', 'type' => 'string'),
array('label' => 'Destination', 'type' => 'string'),
array('label' => 'Text', 'type' => 'string'),
array('label' => 'Sentiment_type', 'type' => 'string'),
array('label' => 'Sentiment_score', 'type' => 'number'),
array('label' => 'Profile_picture', 'type' => 'string'),
array('label' => 'TweetID', 'type' => 'number')
);
$rows = array();
while($r = mysql_fetch_assoc($query)) {
$temp = array();
// each column needs to have data inserted via the $temp array
$temp[] = array('v' => $r['Username']);
$temp[] = array('v' => (int) $r['Retweet_count']); // typecast all numbers to the appropriate type (int or float) as needed - otherwise they are input as strings
$temp[] = array('v' => $r['Origin']);
$temp[] = array('v' => $r['Destination']);
$temp[] = array('v' => $r['Text']);
$temp[] = array('v' => $r['Sentiment_type']);
$temp[] = array('v' => (double) $r['Sentiment_score']);
$temp[] = array('v' => $r['Profile_picture']);
$temp[] = array('v' => (int) $r['TweetID']);
// insert the temp array into $rows
$rows[] = array('c' => $temp);
}
// populate the table with rows of data
$table['rows'] = $rows;
file_put_contents($file, json_encode($table, JSON_FORCE_OBJECT), FILE_APPEND | LOCK_EX);
// Read it back out with
echo file_get_contents($file);
// set up header; first two prevent IE from caching queries
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
感谢您的帮助!
答案 0 :(得分:0)
你不能只是将新数据“追加”到json字符串,这通常会通过引入语法错误来破坏json。请记住,json字符串在语法上是有效的javascript。
所以如果你的json字符串以
开头['a','b','c'];
并且你要使用几个新的数组元素,你最终会得到
['a','b','c']['d',e'];
并获得垃圾,因为这不是有效的json / javascript。
你需要解码将json恢复为本机PHP结构,然后在那里附加,然后重新编码到json:
$json = '....';
$array = json_decode($json);
while( ... ) {
$array[] = $new_data;
}
$json = json_encode($array);