javascript - 如何在 JSON 中分隔每个变量
问题描述
所以,我有一个 ajax 调用,显示我的 JSON 如下:
{"main_object":{"id":"new","formData":"language=nl_NL&getExerciseTitle=test&question_takeAudio_exerciseWord%5B0%5D=test&Syllablescounter%5B0%5D=test&Syllablescounter%5B1%5D=test"}}
但我想这样:
{"main_object":{"language":"nl_NL","getExerciseTitle":"asd","question_takeAudio_exerciseWord":["asd"],"Syllablescounter":["ASDasd",""]}}
我唯一要添加的是“id”:“new”。
这是我的 ajax 调用(我的 JSON 开始看起来像我的 ajax 调用的第一个)
function saveExerciseAjaxCall() {
$("#my_form").on("submit", function (event) {
event.preventDefault();
$.ajax({
url: 'saveJson.php',
type: 'POST',
data: {id: getUrlParameter('id'), formData: $('#my_form').serialize()},
dataType: 'json',
}).done(function (response) {
window.location = 'index.php';
});
});
}
编辑:Ouni 想让我展示 php 脚本中发生的事情,所以这里是:
<?php
include_once('database_json.php');
$data = $_POST;
//Setup an empty array.
$errors = array();
if (isset($data)) {
$newExerciseData['main_object'] = $data;
$exerciseArray = $data['main_object'];
$databaseFile = 'json_files/database.json';
$textContent = file_get_contents($databaseFile);
$database = json_decode($textContent, true);
if ($data['id'] === 'new') {
if (count($database['data']) == 0) {
$ID = 0;
} // ending database['data'] count 0.
else {
$maxID = max($database['data']);
$ID = ++$maxID["id"];
} // ending the max ID else statement.
$newJsonFile = 'jsonData_' . $ID . '.json';
$newJsonFilePath = 'json_files/' . $newJsonFile;
//Create new database exercise_txt
$newArrayData = array(
'id' => $ID,
'exercisetitle' => $data['formData']['getExerciseTitle'],
'language' => $data['formData']['language'],
'file' => $newJsonFile
);
$database['data'][] = $newArrayData;
} // } op regel 34 lijkt verdwaald...?
else {
$index = array_search((int) $_POST['id'], array_column($database['data'], 'id'));
$correctJsonFile = 'json_files/jsonData_' . $_POST['id'] . '.json';
$newJsonFile = 'jsonData_' . $_POST['id'] . '.json';
$newJsonFilePath = 'json_files/' . $newJsonFile;
//Create new database exercise_txt
$newArrayData2 = array(
'id' => (int) $data['id'],
'exercisetitle' => $data['formData']['getExerciseTitle'],
'language' => $data['formData']['language'],
'file' => $newJsonFile
);
$database['data'][$index] = $newArrayData2;
} // closing off the else statement
$newExerciseData['main_object'] = $database['data'];
header('Content-Type: application/json');
file_put_contents($databaseFile, json_encode($database, JSON_UNESCAPED_UNICODE, JSON_PRETTY_PRINT));
file_put_contents($newJsonFilePath, json_encode($newExerciseData, JSON_UNESCAPED_UNICODE, JSON_PRETTY_PRINT));
echo json_encode($newExerciseData, JSON_UNESCAPED_UNICODE);
} //closing off the if isset.
如何做到这一点?我知道问题不是我的 saveJson.php。我知道这是我的 ajax 调用,因为当我添加 id 时它开始显示为第一段 JSON 代码:getUrlParameter('id')
解决方案
只是为了关注您的问题本身,而不考虑对您的整体方法所做的完全有效的评论,看起来您有查询字符串格式的数据,并且您希望将其解析为 JSON 格式。查询字符串格式是如下所示的数据:
language=nl_NL&getExerciseTitle=test
你最终想要这个:
{
language: "nl_NL",
getExerciseTitle: "test"
}
等等。
实现这一点的一种方法是使用一个现有的库来为你做这件事。例如,查询字符串包。
例如,给定一个字符串:
const result = "language=nl_NL&getExerciseTitle=test";
const parsed = queryString.parse(result);
会产生你期望的结果。
推荐阅读
- c# - ASP .NET Core 更改默认 ApiController BadResponse
- api - 火币签名总是返回“签名无效”:验证失败
- python - 根据 np.random.random 的结果制定 if/elif 语句的更有效方法?
- load-balancing - AutoScaling 环境监控
- sql-server - SQL 代理弄乱了连接字符串中的特殊字符
- django - NGINX HTTP 499 与 AWS NLB 和 Gunicorn _ Django
- ios - 如何在 iOS 的键盘上方添加完成按钮?
- javascript - Node.js - 加载所有文件,还是不加载所有文件,这是我的问题
- postgresql - 将参数传递给视图
- openstack - 如何在没有源代码补丁的情况下将自定义计算驱动程序连接到 openstack nova-compute?