首页 > 解决方案 > 如何在 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')

标签: javascriptjsonajax

解决方案


只是为了关注您的问题本身,而不考虑对您的整体方法所做的完全有效的评论,看起来您有查询字符串格式的数据,并且您希望将其解析为 JSON 格式。查询字符串格式是如下所示的数据:

language=nl_NL&getExerciseTitle=test

你最终想要这个:

{
  language: "nl_NL",
  getExerciseTitle: "test"
}

等等。

实现这一点的一种方法是使用一个现有的库来为你做这件事。例如,查询字符串包。

例如,给定一个字符串:

 const result = "language=nl_NL&getExerciseTitle=test";
 const parsed = queryString.parse(result);

会产生你期望的结果。


推荐阅读