2015-03-18 6 views
0

Так что я с этой проблемой, когда я пытаюсь преобразовать что-то такое, какКак разобрать ключи JSon в объекты JSON

[0]['question']: "what is 2+2", 
[0]['answers'][0]: "21", 
[0]['answers'][1]: "312", 
[0]['answers'][2]: "4" 

в реальный отформатированный объект JSON, как так

[ 
    { 
    'question': 'what is 2+2', 
    'answers': ["21", "312", "4"] 
    } 
] 

, но я не слишком уверен, какой подход предпринять, чтобы сделать эту работу.

Я планирую разобрать значения ключа в первом отрезаемом javascript и декодировать его в json-объект, как во втором фрагменте через python.

У вас есть идея о том, как это сделать? Я бы принял пример практически на любом языке, так как не следует беспокоиться о том, чтобы прочитать концепцию, стоящую за ними.

+0

1 - Этот второй объект не является JSON. Вы на самом деле имеете в виду JSON, или вы просто имеете в виду объект javascript, который выглядит так? – Joe

+0

2 - Откуда вы знаете, что «вопрос» имеет один строковый объект, но «ответы» - это массив? – Joe

+0

Я уверен, что он будет следовать этому формату, так как я буду тем, кто разрешает ввод. Они могут задавать только однострочные вопросы. Что я имел в виду, это какой-то набор данных, который python мог анализировать на основе одной и той же связанной карты. – user3254198

ответ

1

Нечто подобное. Вам необходимо обрабатывать ошибки ввода.

Функция взять структуру данных и добавить материал к нему на основе входных данных

function add(old, input) { 
    var index = input[0]; 
    var section = input[1]; 
    if (old[index] == undefined) { 
    old[index] = {} 
    }; 
    if (section == "question") { 
    old[index]['question'] = input[2]; 
    } 

    if (section == "answers") { 
    var answerIndex = input[2]; 
    var answerValue = input[3]; 

    if (old[index]["answers"] == undefined) { 
     old[index]["answers"] = [] 
    }; 

    old[index]["answers"][answerIndex] = answerValue 
    } 

    return old; 
} 

Некоторые входы:

var inputs = [[0, "question", "what"], 
       [0, "answers", 0, "21"], 
       [0, "answers", 1, "22"]]; 

var result = {}; 

inputs.forEach(function(input) { add(result, input) }) 

JSON.stringify(result) 


"{"0":{"question":"what","answers":["21","22"]}}" 
+0

Тогда я сделаю это, спасибо, что помог мне :) – user3254198

0

Я думаю, вы должны форматировать JSON следующим образом:

{ 
    "questions": [ 
     { 
      "question": "What is 2+2", 
      "possible_answers": [ 
       { 
        "value": 1, 
        "correct": false 
       }, 
       { 
        "value": 4, 
        "correct": true 
       }, 
       { 
        "value": 3, 
        "correct": false 
       } 
      ] 
     }, 
     { 
      "question": "What is 5+5", 
      "possible_answers": [ 
       { 
        "value": 6, 
        "correct": false 
       }, 
       { 
        "value": 7, 
        "correct": false 
       }, 
       { 
        "value": 10, 
        "correct": true 
       } 
      ] 
     } 
    ] 
} 

для этого, вы можете это сделать:

var result = {} 
result.questions = []; //the questions collection 

var question = {}; //the first question object 
question.question = "what is 2 + 2";  
question.possible_answers = []; 

var answer1 = {}; 
answer1.value = 1; 
answer1.correct = false; 

var answer2 = {}; 
answer2.value = 2; 
answer2.correct = true; 

var answer3 = {}; 
answer3.value = 3; 
answer3.correct = false; 

question.possible_answers.push(answer1); 
question.possible_answers.push(answer2); 
question.possible_answers.push(answer3); 

result.questions.push(question); //add the first question with its possible answer to the result. 

Вы можете помочь себе с помощью jsonlint для форматирования json, а затем попытайтесь установить свой javascript-объект, чтобы получить json, который вы хотите.

Надежда поможет вам!