如何在Rails中将Json数组保存为HTML格式?

时间:2017-12-24 02:57:46

标签: ruby-on-rails arrays json ruby rake-task

Hello Ruby用户我有Json数组格式

[
"Can also work with any bluetooth-enabled smartphones and\ntablets",
 "For calls and music, Hands-free", 
"Very stylish design and lightweight", 
"Function:Bluetooth,Noise Cancelling,Microphone", 
"Compatible:For Any Device With Bluetooth Function", 
"Chipset: CSR4.0", "Bluetooth Version:Bluetooth 4.0", 
"Transmission Distance:10 Meters"
]

我想使用下面的html格式将此数组保存为html形式。

<ul>
    <li>Can also work with any bluetooth-enabled smartphones and\ntablets</li> 
    <li>For calls and music, Hands-free</li> 
    <li>Very stylish design and lightweight</li> 
    <li>Function:Bluetooth,Noise Cancelling,Microphone</li> 
    <li>Compatible:For Any Device With Bluetooth Function</li> 
    <li>Chipset: CSR4.0</li> 
    <li>Bluetooth Version:Bluetooth 4.0</li> 
    <li>Transmission Distance:10 Meters</li>
</ul>

这是我当前正常工作的代码,如果我必须将它保存为数组,但是我需要将其作为html格式,以便用户可以轻松阅读

result = JSON.parse(jsonparse)

result["mods"]["listItems"].each do |result|
    @item = Item.new
    @item.item_details = result["description"]

    @item.save
end

根据我之前的尝试解决此问题

result = JSON.parse(jsonparse)

result["mods"]["listItems"].each do |result|
    @item = Item.new

    item_list = result["description"]
    item_list.each do |list|
      @item.item_details = "<li>"+list+"</li>"
    end

    @item.save
end

这个只保存一个数组而没有<ul>

继承原始代码

namespace :scraper do
  desc "Scrape Website"
  task somesite: :environment do

    require 'open-uri'
    require 'nokogiri'
    require 'json'

        url = "url here!"
        page = Nokogiri::HTML(open(url))
        script = page.search('head script')[2]

        jsonparse = script.content[/\{\"[a-zA-Z0-9\"\:\-\,\ \=\(\)\.\_\D\/\[\]\}]+/i]

        result = JSON.parse(jsonparse)

        result["mods"]["listItems"].each do |result|
            @item = Item.new


            item_details = result["description"].each {|list| "<li>#{list}</li>" }
            puts item_details

            @item.item_old_price = result["originalPrice"]
            @item.item_final_price = result["price"]

            @item.save
        end
  end
end

想法是使用html格式将数组保存到数据库中。

    <ul>
    <li>content 1</li>
    <li>content 2</li>
    <li>content and soon</li>
    </ul>

由于

1 个答案:

答案 0 :(得分:0)

我不确定你打算做什么。

请检查以下代码并给我反馈。 快乐的编码:)

<!-- language: ruby -->
require 'json'

class MyJsonParser
  def initialize
    @items = []
  end

  def parse(json)
    result = JSON.parse(json)
    generate_items(result)

    items
  end

  private

  attr_reader :items

  def generate_items(result)
    result['mods']['listItems'].each {|item_detail| items << Item.new(item_detail)}
  end
end

class Item
  attr_reader :details

  def initialize(detail='')
    @details = ''
    before_initialize
    details << detail
    after_initialize
  end

  private

  def before_initialize
    details << '<li>'
  end

  def after_initialize
    details << '</li>'
  end
end

json_str = '{
  "mods": {
    "listItems":
      [
        "Can also work with any bluetooth-enabled smartphones and\ntablets",
        "For calls and music, Hands-free",
        "Very stylish design and lightweight",
        "Function:Bluetooth,Noise Cancelling,Microphone",
        "Compatible:For Any Device With Bluetooth Function",
        "Chipset: CSR4.0",
        "Bluetooth Version:Bluetooth 4.0",
        "Transmission Distance:10 Meters"
      ]
  }
}'

result = MyJsonParser.new.parse(json_str)
result.each do |i|
  p i.details
end