Nilay Patel
Nilay Patel

Reputation: 55

How do I pass Javascript Object to Bixby's Action Output?

I am building an app that search for anime quotes. So, I have the following data, which is 331 Objects (which I call them 'Quote Cards') long and so it will also be updated in future as I add more and more quotes. The problem I having is in creating concepts for JS's array items such as keywords, and imageTag. and also the the character names which are listed as property. I am also willing to change the output as long as I can keep category, and keywords array items. Those are necessary for my quote cards

[
  {
    $id: "Cold_Souls_1",
    animeTitle: "Fullmetal Alchemist Brotherhood",
    animePoster:{
      referenceImage: 'https://qph.fs.quoracdn.net/main-qimg-da58c837c7197acf364cb2ada34fc5fb.webp',
      imageTags: ["Grey","Yellow","Blue","Metal Body","Machine", "Robot","Yellow Hair Boy"],
    },
    animeCharacters:{
      "Edward Elric": [
        {
          quote: "A lesson without pain is meaningless. For you cannot gain something without sacrificing something else in return. But once you have recovered it and made it your own... You will gain an irreplaceable Fullmetal heart.",
          keywords: ["lesson", "pain", "return", "meaningless", "gain","sacrificing", "recover"],
          category: "Life Lesson"
        }
      ]
    }
  },....................
]

Upvotes: 2

Views: 94

Answers (1)

Pete Haas
Pete Haas

Reputation: 1800

In Bixby, you would model a structure that represents the JSON response.

structure (Anime) {
  description (The output of your action)

  property (title) {
    type(viv.core.Text)
    visibility (Private)
  }

  property (poster){
    type(AnimePoster)
    visibility (Private)
  }

  property (characters) {
    type (AnimeCharacter)
    max (Many)
    visibility (Private)
  }

}

structure (AnimePoster) {

  property (referenceImage) {
    type (viv.core.Text)
    visibility (Private)
  }

  property (imageTags) {
    type (viv.core.Text)
    max (Many)
    visibility (Private)
  }

}


structure (AnimeCharacter) {

  property (name) {
    type (viv.core.Text)
    visibility (Private)
  }

  property (quote) {
    type (viv.core.Text)
    visibility (Private)
  }

  property (keywords) {
    type (viv.core.Text)
    max (Many)
    visibility (Private)
  }

  property (category) {
    type (viv.core.Text)
    visibility (Private)
  }

}

In your javascript file, you process the JSON structure of animes

// listOfAnimes is the JSON  object described in the question

var animes = [];

listOfAnimes.forEach((anime) => {

    var characterNames = Object.keys(anime.animeCharacters);
    var characters = [];

      Object.keys(anime.animeCharacters).forEach((key) => {
           characters.push({
             name: key,
             quote: anime.animeCharacters[key][0].quote, // * warning, can be many
             category: anime.animeCharacters[key][0].category// * warning, can be many
           });
    });

    animes.push( {
       $id: anime.$id,
       title: anime.title,
       characters: characters,
       poster: {
         referenceImage: anime.animePoster.referenceImage,
         imageTags: anime.animePoster.imageTags
       },

    });

});

enter image description here

Upvotes: 4

Related Questions