mcauth
mcauth

Reputation: 924

How to JSON.parse data in a Meteor template?

Here is my scenario, the first project with Meteor: I have JSON-stringified data embedded in my MongoDB documents, as you can see in the MESSAGE key below:

{ "DATE" : "Jan 24 23:28:14",
  "MESSAGE" : **"{\"status_code\":200,\"uri\":\"172.16.156.143/content/dynamic\",\"tprocess\":3}"**,
  "_id" : ObjectId("5101c3992a1624e726000014") }

In Meteor, my client template code looks like the following basic pattern:

Template.log.logEntry = function () {
    return Messages.find({});
};

... Which works OK, but it'll obviously render the following template...

<template name="log">
    <h1>Log Entries Are:</h1>
        {{#each logEntry}}
            <div> : {{MESSAGE}} </div>
        {{/each}}
</template>

... With a non-parsed, literal string in the browser, for example,

{"status_code":200,"uri":"172.16.156.143/static/style.css","tprocess":2}

I'd love to JSON.parse() this string and do more interesting things, but I'm not sure how best to do it from the isClient context in my Meteor project's JavaScript file.

Upvotes: 4

Views: 9643

Answers (2)

mcauth
mcauth

Reputation: 924

I'm not sure if this is the best way to do it (indeed, I suspect not), but this works as expected.

Template.log.helpers({
  get_uri: function () {
     return JSON.parse(this.MESSAGE).uri;
}

Calling it in the template is now just:

{{ get_uri }}

Upvotes: 2

avital
avital

Reputation: 1542

Add a template helper:

Template.log.aSpecificField = function () {
  return JSON.parse(this.MESSAGE).aSpecificField;
}

which allows you to use {{aSpecificField}} within your #each loop.

Upvotes: 7

Related Questions