2015-05-14 2 views
1

В настоящее время я извлекаю два массива JSON, и я храню их в переменных json_one и json_two. Все работает нормально, но теперь я хотел бы как-то объединить их в один массив.Объединить 2 массива с одним словарем

Как объединить 2 массива с одним словарем?

json_one

[ 
    { 
    "address": "1031 25th Street San Diego, CA 92102", 
    "id": 1, 
    "resource_type_id": 3, 
    } 
] 

json_two

[ 
    { 
    "resource_id": 4, 
    } 
[ 

Я попытался это ....

def show 
    @user = User.find(params[:user_id]) 
    @favorite = @user.favorites.find(params[:id]) 
     @resource_data = [] 
     (@resource_data << @favorite.resource_type.community_resources.where(:id => @favorite.resource_id)).flatten! 
     (@resource_data << @favorite.resource_type.district_resources.where(:id => @favorite.resource_id)).flatten! 
     (@resource_data << @favorite.resource_type.military_resources.where(:id => @favorite.resource_id)).flatten! 
     (@resource_data << @favorite.resource_type.school_resources.where(:id => @favorite.resource_id)).flatten! 

     @favorite_data = [] 
     (@favorite_data << @favorite) 

     json_one = @resource_data.to_json(:only => [:id, :resource_type_id,:district_id, 
     :school_id, :name, :description, :website, :phone, :email, :address, :latitude, :longtude]) 

     json_two = @favorite_data.to_json(:only => [:resource_id]) 

     array1 = JSON.parse(json_one) 
     array2 = JSON.parse(json_two) 

     #array1 << array2 
     #firsts = array2.map {|array2| array2.first} 

     combined = [ array1.first.merge(array2.first) ] 

     respond_to do |format| 
     format.html 
     format.json { render json: data } 
     end 
    end 

###but this is my result. 
###I would like both dictionaries to be combined into one. 

[ 
    { 
    "address": "1031 25th Street San Diego, CA 92102", 
    "id": 1, 
    "resource_type_id": 3, 
    } 
    { 
    "resource_id": 4, 
    } 
] 

ответ

1
json_one = "[{\"address\":\"1031 25th Street San Diego, CA 92102\",\"id\":1,\"resource_type_id\":3}]" 
json_two = "[{\"resource_id\":4}]" 

array1 = JSON.parse(json_one) 
array2 = JSON.parse(json_two) 

combined = [ array1.first.merge(array2.first) ] 

respond_to do |format| 
    format.html 
    format.json { render json:combined } 
end 

FWIW, я хотел бы сделать это без JSON:

combined = @resource_data.slice(:id, :resource_type_id,:district_id, 
           :school_id, :name, :description, :website, 
           :phone, :email, :address, :latitude, :longtude) 
         .merge(@favorite_data.slice(:resource_id)) 

Это извлекает искомые атрибуты от @resource_data и объединяет их с атрибутом @favorite_data resource_id.

См. Rails slice docs.

+1

Вам нужно разобрать JSON. array_1 и array_2 анализируются из JSON: 'array1 = JSON.parse (json_one)' –

+1

Не знаете, откуда эта ошибка. Можете ли вы поставить 'json_one' и' json_two'? –

+1

Я не думаю, что вам нужен JSON. Что такое '@ resource_data' и' @ favorite'? –

Смежные вопросы