jQuery で JSON を参照して読み取る - for と $.each

jQuery の簡単な例を見て、JavaScript オブジェクトの配列を参照してみましょう。

var json = [
{"id":"1","text":"paris"},
{"id":"2","text":"マルセイユ"},
{"id":"3","text":"リール"},
{"id":"4","text":"メス"},
{"id":"5","text":"renne"}
];

$.each(json, function(i, obj) {
alert(obj.text);
});
この例の実行は正しく実行され、市区町村が警告ボックスに表示されます。シングルクォートまたはダブルクォートで文字列 JSON を宣言する場合の一般的な問題.

var json = '[{"id":"1","city":"paris"},{"id":"2","city":"marseille"},
{"id":"3","city":"lille"},{"id":"4","city":"metz"},
{"id":"5","city":"トナカイ"}]';

$.each(json, function(i, obj) {
alert(obj.city);
});
Chromeブラウザはコンソールにこのエラーを表示します:

Uncaught TypeError:'in'演算子を使用して検索できません...
in [{"id":"1","ville":"paris"}...
理想的な解決策は、JSON.parse() 関数または jQuery 関数を使用して JSON を JavaScript オブジェクトに変換することです $.parseJSON.

$.each(JSON.parse(json), function(i, obj) {
alert(obj.ville);
});

//ou

$.each($.parseJSON(json), function(i, obj) {
alert(obj.city);
});

JSON の例と JavaScript ループ for

次の例は、JavaScript の for ループを使用して JSON オブジェクトを反復処理する方法を示しています.



<ヘッド>

javascript の for と JSON ループの例<br /> <スクリプト src="https://code.jquery.com/jquery-1.10.2.js"><br /></head><br /><ボディ><br /><br /><スクリプト><br />$(function() {<br /><br />var data = [<br /> {"id":"1","name":"One"},<br /> {"id":"2","name":"Two"},<br /> {"id":"3","name":"Three"},<br /> {"id":"4","name":"Four"},<br /> {"id":"5","name":"Five"}<br />];<br /> <br />var data_length = data.length;<br />for (var i = 0; i < data_length; i++) {<br /> alert(data[i]["id"] + " " + data[i]["name"]);<br />}<br />});<br /></script><br /></body><br /></html><br /></pre>Resources:<br /><a href="http://api.jquery.com/each/" target="_blank">jQuery each() メソッド</a><br /><a href="http://stackoverflow.com/questions/4233354/how-to-iterate-json-data-in-jquery" target="_blank">jquery</a></div で json データを反復処理する方法> </article> <!-- Système de commentaires - Option 1 : Authentification requise --> <div class="comments-section"> <div class="comments-header"> <h3 class="comments-count">Commentaires (12)</h3> </div> <!-- Si l'utilisateur n'est pas connecté --> <div class="comment-auth-required"> <h4>Connectez-vous pour commenter</h4> <p>Rejoignez la discussion et partagez vos connaissances avec la communauté</p> <div class="auth-buttons"> <a href="/login" class="btn-login">Se connecter</a> <a href="/register" class="btn-register">Créer un compte</a> </div> </div> <!-- Si l'utilisateur est connecté, afficher le formulaire --> <!-- <div class="comment-form"> <textarea placeholder="Écrivez votre commentaire..."></textarea> <button>Publier</button> </div> --> <!-- Liste des commentaires --> <div class="comments-list"> <div class="comment"> <div class="comment-header"> <div class="comment-author"> <div class="comment-avatar">JD</div> <div class="comment-author-info"> <span class="comment-author-name">Jean Dupont</span> <span class="comment-date">Il y a 2 heures</span> </div> </div> </div> <div class="comment-content"> <p>Excellent tutoriel !</p> </div> <div class="comment-actions"> <span class="comment-action">👍 12</span> <span class="comment-action">Répondre</span> <span class="comment-action">Signaler</span> </div> <!-- Réponses --> <div class="comment-replies"> <div class="comment-reply"> <div class="comment-author"> <strong>CodeurJava</strong> <span style="color: #10b981;">✓ Auteur</span> <span class="comment-date"> • Il y a 1 heure</span> </div> <p>N'hésitez pas si vous avez des questions.</p> </div> </div> </div> </div> </div> </main> <!-- Right Sidebar --> <aside class="aside"> <!-- Author Box --> <div class="aside-section"> <h3>À propos de l'auteur</h3> <div class="author-box"> <div class="author-avatar">CJ</div> <div class="author-info"> <h4>CodeurJava</h4> <p>Passionné de Java et de développement</p> </div> </div> </div> <!-- Related Articles --> <div class="aside-section"> <h3>Articles similaires</h3> <a href="https://www.codeurjava.com/ja/php/html、css、php、mysqlを使用したログインフォーム.html" class="related-article">HTML/CSS、PHP、MySQLによるログインフォーム</a> <a href="https://www.codeurjava.com/ja//asciiテーブルとヘキサからasciiへのコンバーター.html" class="related-article">テキスト/ASCIIコンバータ</a> <a href="https://www.codeurjava.com/ja/python/for-in-を使用して-python-でリストを参照する.html" class="related-article">Pythonでリストを閲覧する方法</a> <a href="https://www.codeurjava.com/ja/java/javaでハッシュマップを閲覧する方法.html" class="related-article">JavaでHashMapを閲覧する方法</a> </div> <!-- Tags --> <div class="aside-section"> <h3>Tags</h3> <div style="display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 1rem;"> </div> </div> <!-- Newsletter --> <div class="aside-section" style="background: var(--gradient); color: white;"> <h3>Newsletter</h3> <p style="margin-bottom: 1rem; font-size: 0.9rem;">Recevez nos derniers articles directement dans votre boîte mail</p> <input type="email" placeholder="Votre email" style="width: 100%; padding: 0.8rem; border-radius: 10px; border: none; margin-bottom: 1rem;"> <button style="width: 100%; background: white; color: var(--primary-color); border: none; padding: 0.8rem; border-radius: 10px; font-weight: 600; cursor: pointer;">S'inscrire</button> </div> </aside> </div> <!-- Footer --> <footer class="article-footer"> <p>© 2025 CodeurJava. Tous droits réservés.</p> </footer> <script> // Generate Table of Contents dynamically function generateTOC() { const tocList = document.getElementById('toc-list'); const headings = document.querySelectorAll('.article-content h2'); headings.forEach((heading, index) => { // Ensure heading has an ID if (!heading.id) { heading.id = 'section-' + index; } // Create TOC item const li = document.createElement('li'); const a = document.createElement('a'); a.href = '#' + heading.id; a.textContent = heading.textContent; if (index === 0) a.classList.add('active'); li.appendChild(a); tocList.appendChild(li); }); } // Call on page load document.addEventListener('DOMContentLoaded', generateTOC); // Progress Bar window.addEventListener('scroll', () => { const winScroll = document.body.scrollTop || document.documentElement.scrollTop; const height = document.documentElement.scrollHeight - document.documentElement.clientHeight; const scrolled = (winScroll / height) * 100; document.getElementById('progressBar').style.width = scrolled + '%'; }); // Table of Contents Active State window.addEventListener('scroll', () => { const sections = document.querySelectorAll('.article-content h2[id]'); const tocLinks = document.querySelectorAll('.toc-list a'); let current = ''; sections.forEach(section => { const sectionTop = section.offsetTop; if (scrollY >= (sectionTop - 200)) { current = section.getAttribute('id'); } }); tocLinks.forEach(link => { link.classList.remove('active'); if (link.getAttribute('href').slice(1) === current) { link.classList.add('active'); } }); }); // Smooth scrolling for TOC links document.addEventListener('click', (e) => { if (e.target.matches('.toc-list a')) { e.preventDefault(); const targetId = e.target.getAttribute('href').slice(1); const targetElement = document.getElementById(targetId); if (targetElement) { targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' }); // Update URL without jumping history.pushState(null, null, '#' + targetId); } } }); // Header Scroll Effect window.addEventListener('scroll', () => { const header = document.querySelector('header'); if (window.scrollY > 100) { header.style.background = 'rgba(255, 255, 255, 0.98)'; header.style.boxShadow = '0 4px 30px rgba(0, 0, 0, 0.08)'; } else { header.style.background = 'rgba(255, 255, 255, 0.95)'; header.style.boxShadow = '0 2px 20px rgba(0, 0, 0, 0.05)'; } }); // Fonction pour initialiser prettyprint function initializePrettyPrint() { // Wrapper automatique des balises pre.prettyprint document.querySelectorAll('pre.prettyprint').forEach(pre => { if (!pre.parentElement.classList.contains('code-wrapper')) { const wrapper = document.createElement('div'); wrapper.className = 'code-wrapper'; const header = document.createElement('div'); header.className = 'code-header'; // Détecter le langage const langClass = Array.from(pre.classList).find(c => c.startsWith('lang-')); const lang = langClass ? langClass.replace('lang-', '').toUpperCase() : 'CODE'; header.innerHTML = ` <span class="code-language" data-lang="${lang.toLowerCase()}">${lang}</span> <button class="copy-button" onclick="copyCode(this)">Copier</button> `; pre.parentNode.insertBefore(wrapper, pre); wrapper.appendChild(header); wrapper.appendChild(pre); } }); // Si vous utilisez Google Prettify, décommentez cette ligne // PR.prettyPrint(); } // Fonction de copie du code function copyCode(button) { const codeBlock = button.closest('.code-wrapper').querySelector('pre'); const textArea = document.createElement('textarea'); textArea.value = codeBlock.textContent; document.body.appendChild(textArea); textArea.select(); document.execCommand('copy'); document.body.removeChild(textArea); button.textContent = 'Copié !'; button.classList.add('copied'); setTimeout(() => { button.textContent = 'Copier'; button.classList.remove('copied'); }, 2000); } // Coloration syntaxique simple (sans Google Prettify) function applySyntaxHighlighting() { document.querySelectorAll('pre.prettyprint').forEach(pre => { let code = pre.innerHTML; // Java keywords const javaKeywords = [ 'public', 'private', 'protected', 'class', 'interface', 'extends', 'implements', 'static', 'final', 'void', 'return', 'if', 'else', 'for', 'while', 'do', 'switch', 'case', 'break', 'continue', 'new', 'this', 'super', 'import', 'package', 'try', 'catch', 'finally', 'throw', 'throws', 'abstract', 'synchronized', 'volatile' ]; // Types const types = [ 'String', 'int', 'boolean', 'double', 'float', 'long', 'char', 'byte', 'short', 'Integer', 'Boolean', 'Double', 'Float', 'Long', 'Character', 'Byte', 'Short', 'List', 'ArrayList', 'Map', 'HashMap', 'Set', 'HashSet' ]; // Literals const literals = ['true', 'false', 'null']; // Apply highlighting // Comments code = code.replace(/(\/\/.*$)/gm, '<span class="com">$1</span>'); code = code.replace(/(\/\*[\s\S]*?\*\/)/g, '<span class="com">$1</span>'); // Strings code = code.replace(/(".*?")/g, '<span class="str">$1</span>'); code = code.replace(/('.')/g, '<span class="str">$1</span>'); // Numbers code = code.replace(/\b(\d+)\b/g, '<span class="lit">$1</span>'); // Keywords javaKeywords.forEach(keyword => { const regex = new RegExp('\\b(' + keyword + ')\\b', 'g'); code = code.replace(regex, '<span class="kwd">$1</span>'); }); // Types types.forEach(type => { const regex = new RegExp('\\b(' + type + ')\\b', 'g'); code = code.replace(regex, '<span class="typ">$1</span>'); }); // Literals literals.forEach(literal => { const regex = new RegExp('\\b(' + literal + ')\\b', 'g'); code = code.replace(regex, '<span class="lit">$1</span>'); }); pre.innerHTML = code; }); } // ======================================== // SYSTÈME DE COMMENTAIRES // ======================================== // Gestion des commentaires class CommentSystem { constructor() { this.isAuthenticated = false; // À remplacer par votre logique d'auth this.comments = []; } // Vérifier l'authentification checkAuth() { // Remplacez par votre logique d'authentification return this.isAuthenticated; } // Afficher/masquer le formulaire selon l'auth toggleCommentForm() { const authRequired = document.querySelector('.comment-auth-required'); const commentForm = document.querySelector('.comment-form'); if (this.checkAuth()) { authRequired.style.display = 'none'; commentForm.style.display = 'block'; } else { authRequired.style.display = 'block'; commentForm.style.display = 'none'; } } // Ajouter un commentaire addComment(content) { if (!this.checkAuth()) { window.location.href = '/login'; return; } // Envoyer le commentaire au serveur fetch('/api/comments', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ articleId: window.articleId, // ID de l'article content: content, parentId: null // null pour un commentaire principal }) }) .then(response => response.json()) .then(data => { // Rafraîchir les commentaires this.loadComments(); }); } // Charger les commentaires loadComments() { fetch(`/api/comments?articleId=${window.articleId}`) .then(response => response.json()) .then(comments => { this.renderComments(comments); }); } // Afficher les commentaires renderComments(comments) { const container = document.querySelector('.comments-list'); container.innerHTML = comments.map(comment => this.renderComment(comment)).join(''); } // Rendre un commentaire renderComment(comment) { return ` <div class="comment" data-id="${comment.id}"> <div class="comment-header"> <div class="comment-author"> <div class="comment-avatar">${comment.author.initials}</div> <div class="comment-author-info"> <span class="comment-author-name">${comment.author.name}</span> <span class="comment-date">${comment.relativeTime}</span> </div> </div> </div> <div class="comment-content"> <p>${comment.content}</p> </div> <div class="comment-actions"> <span class="comment-action" onclick="likeComment(${comment.id})">👍 ${comment.likes}</span> <span class="comment-action" onclick="replyToComment(${comment.id})">Répondre</span> <span class="comment-action" onclick="reportComment(${comment.id})">Signaler</span> </div> ${comment.replies ? ` <div class="comment-replies"> ${comment.replies.map(reply => this.renderReply(reply)).join('')} </div> ` : ''} </div> `; } // Rendre une réponse renderReply(reply) { return ` <div class="comment-reply"> <div class="comment-author"> <strong>${reply.author.name}</strong> ${reply.author.isAuthor ? '<span style="color: #10b981;">✓ Auteur</span>' : ''} <span class="comment-date"> • ${reply.relativeTime}</span> </div> <p>${reply.content}</p> </div> `; } } // Initialisation document.addEventListener('DOMContentLoaded', function() { // Initialiser prettyprint initializePrettyPrint(); applySyntaxHighlighting(); // Initialiser le système de commentaires const commentSystem = new CommentSystem(); commentSystem.toggleCommentForm(); commentSystem.loadComments(articleId); }); // Pour soumettre un commentaire async function submitComment() { const content = document.getElementById('commentContent').value; const formData = new FormData(); formData.append('action', 'add'); formData.append('article_id', articleId); formData.append('content', content); formData.append('csrf_token', csrfToken); const response = await fetch('/api/comments.php', { method: 'POST', body: formData }); const result = await response.json(); if (result.success) { // Recharger les commentaires commentSystem.loadComments(articleId); } } </script>