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

问题描述 投票:0回答:2

以下是我希望返回的数组的外观。这可以作为对象或数组返回。下面的函数尝试填充数组。它应该返回一个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());

感谢您的帮助。谢谢。

克雷格·杜西

javascript json
2个回答
0
投票

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

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


0
投票

以下函数生成的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: {}, startdate: {month: {}, day: {}, year: {}}, text: {}} }; // Define the object structure.

     var deEvents = []; // Events array.
     var nmEvents = tlnsARR.length;
     for ( var i=0; 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.

           var media = {}; // Create objects.
           var startdate = {};
           var text = {};                

           myJson.events.media['url'] = tllnprtsARR[0]; // Load event parts.
           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];

           deEvents.push(myJson.events); // Put the labeled event into the array of events.

         }

     } 

     myJson['events'] = deEvents; // Replace the events object space with the full labeled event set.        

     var JSONobj = JSON.stringify(myJson); // Convert it to literal JSON object form.     

     return JSONobj;

   }

注意,我将完全限定的事件存储在数组中,并将该数组放入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/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 a hole in the ground.</p>"}
          },
          {"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 a hole in the ground.</p>"}
          },
          {"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 a hole in the ground.</p>"}
           }
         ]
}

感谢大家对此进行了解。

craigt

© www.soinside.com 2019 - 2024. All rights reserved.