Json в Javascript - PullRequest
       4

Json в Javascript

0 голосов
/ 29 июля 2010

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

<html>
<head>
<title>TEST</title>
<script language="Javascript" type="text/javascript">
 function addC(){


  var index = document.getElementById('type').selectedIndex;
  var type = document.getElementById('type').options[index].value;
  var name = document.getElementById('inpName').value;
  var date = document.getElementById('inpDate').value;

  processJson(type,name,date);

  return false;
 }

 function processJson(type,name,date){

  var count = document.getElementById('counter').value*1;
  var currentRecords = document.getElementById('holder').value;
  var newRecordType = "{\"name\":\""+type+"\",";
  var newRecordName = "\"type\":\""+name+"\",";
  var newRecordDate = "\"date\":\""+date+"\"}";
  var newRecord = newRecordType + newRecordName + newRecordDate;

  if(count > 0){
   newRecord = "," + newRecord;
  }
  var updatedRecord = currentRecords + newRecord;


  var jsonObj = {"allrows" : "["+updatedRecord+"]"};
  document.getElementById('counter').value=(document.getElementById('counter').value *1)+ 1;
  document.getElementById('holder').value=updatedRecord;  
 }

 function deleteRow(){
  var toDel = document.getElementById('inpDel').value;
  alert(toDel);
  var current = "[" + document.getElementById('holder').value + "]";
  alert(current);
  var jsonO = {"allRows" : current};
  alert(jsonO);
  var t = jsonO.allRows[toDel].type;
  alert("Deleting - " + t);
  return false;  
 }

</script>




</head>

<body>
<form name="frm" action="">
<table>
 <tr>
  <td>
   <select name="type" id="type">
    <option value="creator">Creator</option>
    <option value="editor">Editor</option>
    <option value="publisher">Publisher</option>
   </select>
  </td>
  <td>
   <input type="text" name="inpName" id="inpName" value="">
  </td>
  <td>
   <input type="text" name="inpDate" id="inpDate" value="">
  </td>
  <td>
   <input type="text" name="inpDel" id="inpDel" value="">
  </td>
  <td>
   <input type="button" name="cmdAdd" value="Add" onClick="return addC();">
   <input type="button" name="cmdAdd" value="Del" onClick="return deleteRow();">
  </td>
 </tr>
 <tr>
  <td><input type="text" name="counter" id="counter" value="0">
 </tr>
 <tr>
  <td colspan="3"> 
   <textarea name="holder" id="holder" rows="20" cols="60"></textarea>

  </td>
 </tr>
</form>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 29 июля 2010

Существует широко используемый скрипт для использования с json: http://www.json.org/js.html

0 голосов
/ 29 июля 2010

Это не JSON, с которым вы играете.Это объекты JavaScript.Предоставленный JSON расшифровывается как «нотация объектов javascript», но обычно он относится к сериализованным объектам, передаваемым по сети.

ОК, поэтому введение в литералы объектов в javascript:

  1. Объект имеет формат {ключ: значение, ключ: значение}, где ключевую часть не нужно заключать в кавычки, если она не является ключевым словом.

  2. Массив имеет формат [значение, значение].

  3. Массивы реализованы в виде объектов.

  4. Чтобы получить доступ к значению в объекте, используйте одно из следующих обозначений:

    object.key
    object['key']
    

    обратите внимание, что вторая запись означает, что вы можете использовать переменную в качестве ключа.

  5. Поскольку массивы являются просто объектами, вы обращаетесь к значениям в массивах одинаково:

    array[index]
    

Итак, чтобы сделать то, что, как я думаю, вы пытаетесь сделать, я бы сделал это так:

Во-первых, простая функция, чтобы превратить объекты встрока:

// WARNING! : simple toString function. You should probably
// use a better one
function toString (obj) {
    if (!isNaN(obj))             return ''+obj;
    if (obj === true)            return 'true';
    if (obj === false)           return 'false';
    if (obj === null)            return 'null';
    if (obj === undefined)       return 'undefined';
    if (typeof obj == 'string')  return '"'+obj+'"';
    if (obj instanceof String)   return '"'+obj+'"';
    var ret="";
    if (obj instanceof Array) {
        ret += "[";
        for (var i=0;i<obj.length;i++) {
            ret += toString(obj[i]);
        }
        ret += "]";
    }
    else {
        ret += "{";
        for (var i in obj) {
            if (obj.hasOwnProperty(i)) {
                ret += toString(i);
                ret += ':';
                ret += toString(obj[i]);
            }
        }
        ret += "}";
    }
    return ret;
}

Теперь остальной код:

var counter_el = document.getElementById('counter');
var count = counter_el.value*1;

// WARNING! : eval is a quick and dirty JSON deserializer
// normally should not be used but is good enough for
// this example:
eval('var currentRecords = ' + document.getElementById('holder').value);
var newRecord = {
    name : type,
    type : name,
    date : date
}

if(count > 0){
    currentRecords.allrows.push(newRecord);
}
else{
    currentRecords = { allrows : [ newRecord ] };
}

counter_el.value=(counter_el.value*1)+ 1;
document.getElementById('holder').value=toString(currentRecords);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...