2015-09-24 3 views
-1

При изучении Javascript и JQuery я чувствовал себя в черной дыре для очень простого кода. Мне нужно преобразовать объект JS в строку usign JSON.stringify. Объект построен путем сборки фрагментов данных из разных источников.
Чтобы упростить дело, это голый пример с полем ввода для ввода данных объекта:JQuery и JSON.stringify недоразумение

<html><head><meta charset="UTF-8" /></head> 
<body> 
<input type="text" id="txt" value="{Name: 'John Smith' , Value: 99}">` 
<button id="test" type="text" value="3">TEST</button> 

<script type="text/javascript" src="jquery-1.11.3.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() 
{ 
$("#test").on('click',test); 
}); 

function test() { 
    query = $("#txt").val(); 
    json = JSON.stringify(query); 
    console.log("query="+json); //"{Name: 'John Smith' , Value: 99}" 

    query={ Name: 'John Smith', Value: 99 }; 
    json = JSON.stringify(query); 
    console.log("query="+json); //{"Name":"John Smith","Value":99} 

    return false; 
}; 
</script> 

</body> 
</html> 

Как вы видите, вводимый текст не «строковой» в то время как встроенный код. Где ошибка? Спасибо

+0

Вы можете добавить скрипку? – Mritunjay

+0

Если вы попытаетесь «стягивать» строку, она просто поместит ее как есть. '$ ('# txt'). val()' уже является строкой. – Mritunjay

ответ

2

Как вы видите, входной текст не является «строгим», а встроенный код. Где ошибка?

Значение, которое вы читали из входа в уже строка, не является объектом.

1

Пара вещей:

  1. Значение извлеченной из поля ввода уже типа string; и
  2. JSON действительно не любит одиночные кавычки, чтобы сказать вам правду. Таким образом, значение, которое вы установили (value="{Name: 'John Smith' , Value: 99}), не является допустимым форматом JSON в соответствии с JSONLint.

Решение

Вы можете попробовать удалить первую строку JSON.stringify использования из кода. И, переключите кавычки в значение поля ввода как: value='{"Name": "John Smith", "Value": 99}'. Это должно сделать трюк для вас.

+0

Так что я не понимаю, что должно делать «stringify». Я краснею, что он должен добавить отсутствующие кавычки и преобразовать одинарные кавычки в двойные кавычки, кроме удаления лишних пробелов. У меня есть несколько входов, и я хочу, чтобы stringify заботился о форматировании их всех сразу, когда просто конкатенировался (т. Е. Height = 40 + ',' + width = 20 ... с '=' заменен на двоеточие. Фактически, когда я пытаюсь Post Post с Ajax data = {«Name»: «John Smith», «Value»: 99}, с типом данных = JSON, я получаю «Недопустимый символ в позиции 1» или что-то подобное. Вот почему я пытаюсь использовать JSON. string: – Orionis

+0

'JSON.stringify' просто преобразует объект JSON, который вы передаете ему, в действительный' JSONString'. Если вы хотите получить симпатичный, хорошо отформатированный JSON, попробуйте это: 'json = JSON.stringify (JSON.parse ($ ("# txt"). val())); '. Убедитесь, что вы перевернули кавычки, как я сказал, прежде чем пытаться это сделать. –

Смежные вопросы