2015-03-18 4 views
0

Я хочу проанализировать все элементы в списке JSON и использовать функцию decode, удалить пространства в формате HTML,% 20 и тому подобное.Элементы «decodeURIComponent» в списке JSON

См фрагмент ниже

Мои цели:

  • Я хочу изменить Энди% 2EPeters к «Энди Питерс»

  • Я не хочу, чтобы обратиться к каждому пункту, как " это product_model "с использованием имени ключа.

$(document).ready(function() { 
 
    $('.btn').click(function() { 
 
    $(ray).each(function(index) { 
 
     console.log("Item BEFORE Decode : " + index + ": " + $(this).text() + ": " + this.product_model); 
 
     this.index = decodeString(this.item); 
 
     console.log("Item AFTER Decode : " + index + ": " + $(this).text() + ": " + this.product_model); 
 
    }); 
 
    }); 
 
}); 
 

 
function decodeString(a) { 
 
    if (typeof a != 'undefined') { 
 
    return decodeURIComponent(a); 
 
    } else { 
 
    return ''; 
 
    } 
 
} 
 
var ray = [{ 
 
    "product_id": "1", 
 
    "product_model": "Andy%2EPeters", 
 
}, { 
 
    "product_id": "2", 
 
    "product_model": "Tom%2EHanks", 
 
}, { 
 
    "product_id": "1", 
 
    "product_model": "HFJ5G1.5", 
 
}, ]; 
 

 

 

 
//console setup 
 
var consoleLine = "<p class=\"console-line\"></p>"; 
 

 
console = { 
 
    log: function(text) { 
 
    $("#console-log").append($(consoleLine).html(text)); 
 
    } 
 
};
.console-line { 
 
    font-family: console; 
 
    margin: 2px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<input class="btn" type="button" id="btn" value="Go!"> 
 
<div id="console-log"></div>

Благодаря

+2

... что даст 'this [0]', 'this [1]' ... в чем смысл? Вы находитесь в цикле «каждый». Итак, «это» - это один элемент. –

+1

Почему бы не 'data = decodeURIComponent (JSON.stringify ([ваш объект данных])), а затем сделать' JSON.parse (data) 'Это будет декодировать все данные за один раз. – Mouser

ответ

1

$(document).ready(function() { 
 
    $('.btn').click(function() { 
 
     var data = decodeURIComponent(JSON.stringify(ray).replace(/(%2E)/ig, "%20")); 
 
     ray = JSON.parse(data); 
 
    
 
     $(ray).each(function(){ 
 
      console.log(this.product_model); 
 
     }) 
 
    }); 
 
}); 
 
var ray = [{ 
 
    "product_id": "1", 
 
    "product_model": "Andy%2EPeters" 
 
}, { 
 
    "product_id": "2", 
 
    "product_model": "Tom%2EHanks" 
 
}, { 
 
    "product_id": "1", 
 
    "product_model": "HFJ5G1.5" 
 
}, ]; 
 

 
//console setup 
 
var consoleLine = "<p class=\"console-line\"></p>"; 
 

 
console = { 
 
    log: function(text) { 
 
    $("#console-log").append($(consoleLine).html(text)); 
 
    } 
 
};
.console-line { 
 
    font-family: console; 
 
    margin: 2px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<input class="btn" type="button" id="btn" value="Go!"> 
 
<div id="console-log"></div>

Это использует объект JSON родной stringify разобрать объект в строку JSON. Перед выполнением декодирования замените все %2E на %20 и, наконец, декодируйте все вместе. Затем проанализируйте его обратно на объект JavaScript.

Я не знаю, это только для демонстрационных целей, но в целом: перезапись консоли - плохая идея.

+0

Спасибо Mouser, решила! Кроме того, консоль была исключительно для демонстрации на JSFiddle/CodeSnippet. – platinums

+2

@platinums - просто fyi, дополнительные запятые в вашем массиве 'ray' разбиваются на IE8 и старше. – wahwahwah

+0

@wahwahwah, не видел этих. Спасибо, что упомянули, обновили мое решение. – Mouser

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