jArr的events数组应该包含3个事件.数组只显示最后一个事件.如何用所有事件填充事件数组



下面是我希望返回的数组的样子。这可以作为对象或数组返回。下面的函数试图填充一个数组。它应该返回一个JSON数组。从下面的函数返回的输出标题媒体和文本部分是正确的。事件数组只显示最后一个事件。

deArr = {
"title": {
"media": {
"url": "//www.dah.dah/photos/dah1.jpg",
"caption": "dah dah dah dah"
},
"text": {
"headline": "dah dah dah dah ",
"text": "dah dah dah dah"
}
},
"events": [{
"media": {
"url": "//www.dah.dah/photos/dah2.jpg",
"caption": "dah dah dah dah"
},
"start_date": {
"month": "8",
"day": "9",
"year": "1963"
},
"text": {
"headline": "dah dah dah dah",
"text": "dah dah dah dah"
}
},
{
"media": {
"url": "//www.dah.dah/photos/dah3.jpg",
"caption": "dah dah dah dah"
},
"start_date": {
"month": "1",
"day": "16",
"year": "1978"
},
"text": {
"headline": "dah dah dah dah",
"text": "dah dah dah dah"
}
},
{
"media": {
"url": "//www.dah.dah/photos/dah4.jpg",
"caption": "dah dah dah dah"
},
"start_date": {
"month": "7",
"day": "28",
"year": "1992"
},
"text": {
"headline": "dah dah dah dah",
"text": "dah dah dah dah"
}
}
]
}
function make_the_json() { // Make the JSON feed for timeline .2
var tlStr = document.ShoTL.tlmrksStr.value; // Lines of the timeline lines are joined by a colon.
var tlStr = tlStr.replace(/http:/g, 'http;'); //  Eliminate URL colons temporarily.
var tlmrks = tlStr.replace(/https:/g, 'https;');
var tlnsARR = [];
tlnsARR = tlmrks.split('_'); // Split timeline lines into array.
// First line must have 4 parts.  The first part is a valid URL.
var tllnprtsARR = [];
tllnprtsARR = tlnsARR[0].split(':'); // Split timeline first line.             
var jArr = [];
var title = [];
var media = [];
var text = [];
var events = [];
var startdate = [];
media['url'] = tllnprtsARR[0];
media['caption'] = tllnprtsARR[1];
text['headline'] = tllnprtsARR[2];
text['text'] = tllnprtsARR[3];
title = [media, text];
tllnprtsARR = [];
media = [];
text = [];
var datePrts = [];
for (var i = 1; i < tlnsARR.length; i++) {
if (tlnsARR[i].indexOf('Analysis:') != -1) { // End loop at analysis start.
break;
}
tllnprtsARR = tlnsARR[i].split(':');
tllnprtsARR[0] = tllnprtsARR[0].replace('http;', 'http:'); //  Bring URL colons back.
tllnprtsARR[0] = tllnprtsARR[0].replace('https;', 'https:');
media['url'] = tllnprtsARR[0];
media['caption'] = tllnprtsARR[1];
datePrts = tllnprtsARR[2].split(',');
startdate['month'] = datePrts[0];
startdate['day'] = datePrts[1];
startdate['year'] = datePrts[2];
text['headline'] = tllnprtsARR[3];
text['text'] = tllnprtsARR[4];
events[i] = [media, startdate, text];
tllnprtsARR = []; // Initialize.
datePrts = [];
}
jArr = [title, events];
return jArr;
}
console.log(make_the_json());

感谢您的帮助。谢谢

Craig Tussey

我认为我正朝着正确的方向前进,但我仍然没有做到。下面是我当前的代码和控制台结果。这是答案的一部分。这些数据只是一个测试。

function make_the_json() { // Make the JSON feed for timeline 2.
var tlStr = document.ShoTL.tlmrksStr.value; // Timeline lines joined by :.
var tlStr = tlStr.replace(/http:/g, 'http;'); // Eliminate URL colons. 
var tlmrks = tlStr.replace(/https:/g, 'https;');         
var tlnsARR = [];
tlnsARR = tlmrks.split('_'); // Split timeline lines into array.
//var myJson = {title: {media: {}, text: {}}, events: [{media: {}, startdate: {month: {}, day: {}, year: {}}, text: {}}]}; // Define the objectstructure
var myJson = {title: {media: {}, text: {}}, events: {media: {}, startdate: {month: {}, day: {}, year: {}}, text: {}}}; // Define the objectstructure
for ( var i=0; i < tlnsARR.length; i++ ) {
if (tlnsARR[i].indexOf('Analysis:') != -1) { // End loop at analysis start.
break;
} 
var tllnprtsARR = [];
tllnprtsARR = tlnsARR[i].split(':');
tllnprtsARR[0] = tllnprtsARR[0].replace('http;', 'http:'); //  Bring URL colons back.
tllnprtsARR[0] = tllnprtsARR[0].replace('https;', 'https:'); 
if (i == 0) { // First record has 4 parts.
myJson.title.media['url'] = tllnprtsARR[0]; // Object attribute = value. 
myJson.title.media['caption'] = tllnprtsARR[1];
myJson.title.text['headline'] = tllnprtsARR[2];
myJson.title.text['text'] = tllnprtsARR[3];
} else { // Second record forward has 5 parts.
myJson.events.media['url'] = tllnprtsARR[0]; 
myJson.events.media['caption'] = tllnprtsARR[1];
var datePrts = [];
datePrts = tllnprtsARR[2].split(',');
myJson.events.startdate['month'] = datePrts[0]; 
myJson.events.startdate['day'] = datePrts[1]; 
myJson.events.startdate['year'] = datePrts[2];
myJson.events.text['headline'] = tllnprtsARR[3];
myJson.events.text['text'] = tllnprtsARR[4];
//myJson.events = [{myJson.events.media}, {myJson.events.startdate}, {myJson.events.text}];
}
}
var JSONobj = JSON.stringify(myJson);            
return JSONobj;
}

控制台结果:

{
"title":{"media":{"url":"http://steepusa.no-ip.info/images/myphoto2.jpg",
"caption":"This is me today."},
"text":{"headline":"Cliff Craig Tussey III<br/> 1950 - ",
"text":"<p>I had a wonderful childhood.</p>"}
},
"events":{"media":{"url":"http://steepusa.no-ip.info/images/past.gif",
"caption":"Here is me and the old lady today."},
"startdate":{"month":"4",
"day":"8",
"year":"2020"},
"text":{"headline":"We are getting old.",
"text":"<p>We are dancing our way to hole in the ground.</p>"}
}
}

我仍然无法插入多个事件,并且多个事件可能会有所不同。我没有得到我所希望的垂直格式。我做了格式化。但到目前为止,结果看起来不错。我仍在尝试获取多个事件的语法。被评论的myJson和循环中被评论的最后一行是我最近的语法尝试,但都无济于事。这是我的第一个JSON,我有点忙,但这次尝试更好。谢谢你的帮助。

craigt

下面的函数生成一个符合本文顶部规范的JSON(deArr(。

function make_the_json() { // Make the JSON feed for timeline 2.
var tlStr = document.ShoTL.tlmrksStr.value; // Timeline lines joined by :.
var tlStr = tlStr.replace(/http:/g, 'http;'); // Eliminate URL colons for split. 
var tlmrks = tlStr.replace(/https:/g, 'https;');         
var tlnsARR = []; // Timeline lines.
tlnsARR = tlmrks.split('_'); // Split timeline lines into array.
var myJson = { title: {media: {}, text: {}}, events: {media: {url: {}, caption: {}}, start_date: {month: {}, day: {}, year: {}}, text: {headline: {}, text: {}} } }; // Define the object structure.
var deEvents = []; // Events array.
var nmEvents = tlnsARR.length;
for ( var i=1; i < nmEvents; i++ ) {
if (tlnsARR[i].indexOf('Analysis:') != -1) { // End loop at analysis start.
break;
} 
var tllnprtsARR = [];
tllnprtsARR = tlnsARR[i].split(':'); // Timeline line parts.
tllnprtsARR[0] = tllnprtsARR[0].replace('http;', 'http:'); //  Bring URL colons back.
tllnprtsARR[0] = tllnprtsARR[0].replace('https;', 'https:'); 
if (i == 0) { // First record has 4 parts.              
myJson.title.media['url'] = tllnprtsARR[0]; // Load title parts. 
myJson.title.media['caption'] = tllnprtsARR[1];
myJson.title.text['headline'] = tllnprtsARR[2];
myJson.title.text['text'] = tllnprtsARR[3];
} else { // Second record forward has 5 parts.               
myJson = myJson = { title: {media: {}, text: {}}, events: {media: {url: {}, caption: {}}, start_date: {month: {}, day: {}, year: {}}, text: {headline: {}, text: {}} } }; 
myJson.events.media['url'] = tllnprtsARR[0]; // Load event parts.
myJson.events.media['caption'] = tllnprtsARR[1];           
var datePrts = [];
datePrts = tllnprtsARR[2].split(',');
myJson.events.start_date['month'] = datePrts[0]; 
myJson.events.start_date['day'] = datePrts[1]; 
myJson.events.start_date['year'] = datePrts[2];
myJson.events.text['headline'] = tllnprtsARR[3];
myJson.events.text['text'] = tllnprtsARR[4]; 
deEvents.push(myJson.events); // Put the labeled event into the array of events.
}
}
myJson = myJson = { title: {media: {}, text: {}}, events: {media: {url: {}, caption: {}}, start_date: {month: {}, day: {}, year: {}}, text: {headline: {}, text: {}} } }; 
myJson['events'] = deEvents; // Replace the events object space with the full labeled event set. 
var tllnprtsARR = [];
tllnprtsARR = tlnsARR[0].split(':'); // Timeline line parts.
tllnprtsARR[0] = tllnprtsARR[0].replace('http;', 'http:'); //  Bring URL colons back.
tllnprtsARR[0] = tllnprtsARR[0].replace('https;', 'https:'); 
myJson.title.media['url'] = tllnprtsARR[0]; // Load title parts. 
myJson.title.media['caption'] = tllnprtsARR[1];
myJson.title.text['headline'] = tllnprtsARR[2];
myJson.title.text['text'] = tllnprtsARR[3];               
//myJson = JSON.stringify(myJson); // Convert it to literal JSON object form for testing.   
return myJson;
}       

请注意,我将完全限定的事件存储在一个数组中,并将数组放入myJson事件对象中,以替换循环中分配的最后一个事件。结果如下。

{
"title": {
"media": {
"url": "http://steepusa.no-ip.info/images/myphoto2.jpg",
"caption": "This is me today."
},
"text": {
"headline": "Cliff Craig Tussey III<br/> 1950 - ",
"text": "<p>I had a wonderful childhood.</p>"
}
},
"events": [
{
"media": {
"url": "http://steepusa.no-ip.info/images/healthxx.jpg",
"caption": "This is my wife and son soon after he was born."
},
"start_date": {
"month": "9",
"day": "17",
"year": "1977"
},
"text": {
"headline": "We were a family.",
"text": "<p>It was a fine time.</p> "
}
},
{
"media": {
"url": "http://steepusa.no-ip.info/images/meoneiffeltower.jpg",
"caption": "This is my son grown up.  As you can see, he has gone tipsey."
},
"start_date": {
"month": "2",
"day": "23",
"year": "1996"
},
"text": {
"headline": "This is him in Paris on the Eiffel Tower",
"text": "<p>He was on an educational trip to India, Japan, and Europe.</p>"
}
},
{
"media": {
"url": "http://steepusa.no-ip.info/images/past.gif",
"caption": "Here is me and the old lady today."
},
"start_date": {
"month": "4",
"day": "8",
"year": "2020"
},
"text": {
"headline": "We are getting old.",
"text": "<p> "
}
}
]
}   

感谢大家看了这个。

craigt

最新更新